本文介绍如何配置阿里云EMR Serverless Spark,通过Databricks Unity Catalog的Delta Sharing,实现对共享数据的跨云只读访问。该方案旨在帮助您打破数据孤岛,支持跨云数据分析、数据同步等多种业务场景。
核心流程
整个过程涉及在 Databricks 端配置数据共享,并将访问凭证提供给阿里云 EMR Serverless Spark 任务进行调用。
Databricks 端:创建
共享 (Share)和接收者 (Recipient),将需要共享的数据表添加到共享 (Share)中,并为接收者 (Recipient)生成一个包含访问令牌的凭证文件 (Credential File)。凭证传递:将下载的凭证文件上传至阿里云对象存储(OSS),以便 Spark 任务读取。
Serverless Spark 端:创建并运行一个 Spark 任务,该任务配置了 Delta Sharing 连接器,通过读取 OSS 上的凭证文件,经由公网访问 Databricks 的数据共享端点,拉取数据进行计算。
操作步骤
步骤一:在 Databricks 中配置数据共享
此步骤的目的是在 Databricks 中定义要共享的数据范围,并为外部访问创建一个安全的凭证。
创建共享 (Share)
登录 Databricks 工作空间,在左侧导航栏进入 Catalog > Delta Sharing > Shared by me。

点击 Shared data,创建一个新的
Share。Share是用于组织和管理待共享数据表的逻辑容器。
添加数据资产 (Assets)
在新建的
共享 (Share)中,输入Share name后,添加数据资产。选择您希望对外共享的一个或多个数据表。
Serverless Spark访问共享数据时会使用到刚刚配置的Share name和相应的库表。

创建接收者 (Recipient)
如果之前没有创建
接收者 (Recipient),可以在下拉列表中选择创建接收者 (Recipient)。也可以返回共享 (Share)详情页,点击 Add recipient 以创建一个新的数据接收者 (Recipient)。
配置接收者并生成凭证文件
为
接收者 (Recipient)生成一个包含访问令牌的凭证文件 (Credential File)。
接收者类型:选择
Open类型。Open类型用于与任何支持 Delta Sharing 协议的客户端(如 EMR Serverless Spark)进行开放共享,它会生成一个可移植的凭证文件。Databricks类型则用于 Databricks 平台之间的内部共享。说明确保Recipient type是Open,如果Open框不可选,需要在右上角organization -> View Delta Sharing Settings中Enable External delta sharing


认证方式:选择
Token类型。Token生命周期:设置
Token有效期,最长支持365天。
创建完成后,系统会生成一个激活令牌链接 (Activation link)。
下载凭证文件
在浏览器中打开上一步生成的 Activation link,系统将提示您下载一个以
.share为后缀的凭证文件。
步骤二:准备阿里云环境
此步骤的目的是将 Databricks 生成的凭证安全地存储在阿里云上,并为 Spark 任务准备好运行环境。
上传凭证文件至 OSS
将上一步下载的
.share凭证文件上传到您的 OSS Bucket 中。记录该文件的完整 OSS 路径,例如
oss://your-bucket/path/to/credential.share。说明安全建议:
建议将凭证文件存储在私有权限的 Bucket 中。
确保后续运行 Spark 任务的 RAM 角色具有该 OSS 文件的读取权限。
配置公网访问
准备一个具备公网访问能力的专有网络(VPC),并配置适用于 Serverless Spark 的交换机,以支持 Serverless Spark 通过公网访问 Databricks Delta Sharing。阿里云提供公网 NAT 网关以实现 VPC 的公网访问,详细操作请参见公网 NAT 网关。Serverless Spark支持的可用区交换机,请参见支持的可用区交换机列表。
步骤三:在 Serverless Spark 中访问数据
此步骤的核心是编写并配置一个 Spark 任务,使其能够利用 凭证文件 读取 Databricks 数据。
添加网络连接
在工作空间中新增网络连接时,请选择前期配置的支持公网访问的专有网络及其对应的交换机。详细操作请参见新增网络连接。
准备并上传SQL文件
准备SQL文件,将共享数据集写入DLF。
-- 创建临时表 -- 替换 凭证文件 地址和 share 数据集 -- demo_share 是前面创建 共享 (Share) 的名称 -- default.alitable 是前面共享的库表 CREATE TEMPORARY TABLE dbc_delta_sharing USING deltaSharing LOCATION 'oss://your-bucket/path/to/credential.share#demo_share.default.alitable'; SELECT * FROM dbc_delta_sharing limit 10; -- 创建数据库和表 CREATE database if NOT EXISTS demo_day_ss_dlf; DROP TABLE if EXISTS demo_day_ss_dlf.dw_songs_ss_dlf; CREATE TABLE demo_day_ss_dlf.dw_songs_ss_dlf SELECT * FROM dbc_delta_sharing limit 10; SELECT * FROM demo_day_ss_dlf.dw_songs_ss_dlf limit 10;通过文件管理,将SQL文件上传至Serverless Spark的工作空间。详细操作请参见管理文件。
添加数据目录
在添加数据目录对话框中,选择
DLF数据目录。数据目录详细操作,请参见管理数据目录。创建 Spark 任务
Notebook任务
创建Notebook会话
在会话管理页面,创建Notebook会话,配置以下参数,其余参数默认。
参数
说明
名称
输入Notebook会话的名称。
引擎版本
推荐使用最新版本。本文使用esr-4.6.0版本。
网络连接
选择已创建的网络连接。
Spark配置
添加以下配置参数。
spark.jars.packages io.delta:delta-sharing-spark_2.12:3.1.0 spark.sql.extensions io.delta.sql.DeltaSparkSessionExtension,org.apache.paimon.spark.extensions.PaimonSparkSessionExtensions spark.sql.catalog.spark_catalog org.apache.spark.sql.delta.catalog.DeltaCatalog创建Notebook任务
在数据开发页面,创建类型为交互式开发的Notebook任务。并复制以下代码保存。
-- 创建临时表 -- 替换 凭证文件 地址和 share 数据集 -- demo_share 是前面创建 共享 (Share) 的名称 -- default.alitable 是前面共享的库表 spark.sql("CREATE TEMPORARY TABLE dbc_delta_sharing USING deltaSharing LOCATION 'oss://your-bucket/path/to/credential.share#demo_share.default.alitable';") spark.sql("SELECT * FROM dbc_delta_sharing limit 10;").show()查看运行结果
运行任务后,结果如下。

SQL任务
在数据开发页面,创建类型为批任务的SQL任务。创建SQL任务,请参见批任务或流任务开发。
配置任务参数
在任务配置页面,配置以下参数,其余参数默认。
参数
说明
SQL文件
提交任务时所需的文件。
类型选择工作空间资源,在下拉列表中上传前面的SQL文件。
引擎版本
推荐使用最新版本。本文使用esr-4.6.0版本。
网络连接
选择已创建的网络连接。
Spark配置
添加以下配置参数。
spark.jars.packages io.delta:delta-sharing-spark_2.12:3.1.0 spark.sql.extensions io.delta.sql.DeltaSparkSessionExtension,org.apache.paimon.spark.extensions.PaimonSparkSessionExtensions spark.sql.catalog.spark_catalog org.apache.spark.sql.delta.catalog.DeltaCatalog运行任务并查看结果
单击运行提交任务。运行任务后,在下方的运行记录区域,单击任务操作列的日志探查,您可以查看相关的日志信息。

查询DLF数据。

相关文档
更多Spark任务类型读取Databricks Delta Sharing的使用方法,请参考delta-sharing。