本文介紹如何配置阿里雲EMR Serverless Spark,通過Databricks Unity Catalog的Delta Sharing,實現對共用資料的跨雲唯讀訪問。該方案旨在協助您打破資料孤島,支援跨雲資料分析、資料同步等多種業務情境。
核心流程
整個過程涉及在 Databricks 端配置資料共用,並將訪問憑證提供給阿里雲 EMR Serverless Spark 任務進行調用。
Databricks 端:建立
共用 (Share)和接收者 (Recipient),將需要共用的資料表添加到共用 (Share)中,並為接收者 (Recipient)產生一個包含存取權杖的憑證檔案 (Credential File)。憑證傳遞:將下載的憑證檔案上傳至阿里雲Object Storage Service,以便 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天。
建立完成後,系統會產生一個啟用 Token連結 (Activation link)。
下載憑證檔案
在瀏覽器中開啟上一步產生的 Activation link,系統將提示您下載一個以
.share為尾碼的憑證檔案。
步驟二:準備阿里雲環境
此步驟的目的是將 Databricks 產生的憑證安全地儲存在阿里雲上,並為 Spark 任務準備好運行環境。
上傳憑證檔案至 OSS
將上一步下載的
.share憑證檔案上傳到您的 OSS Bucket 中。記錄該檔案的完整 OSS 路徑,例如
oss://your-bucket/path/to/credential.share。說明安全建議:
建議將憑證檔案儲存體在私人許可權的 Bucket 中。
確保後續運行 Spark 任務的 RAM 角色具有該 OSS 檔案的讀取許可權。
配置公網訪問
準備一個具備公網訪問能力的Virtual Private Cloud,並配置適用於 Serverless Spark 的交換器,以支援 Serverless Spark 通過公網訪問 Databricks Delta Sharing。阿里雲提供公網 NAT Gateway以實現 VPC 的公網訪問,詳細操作請參見公網 NAT Gateway。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。