連線至 Google Cloud Storage
本文說明如何設定 Azure Databricks 的連線,以讀取和寫入儲存在 Google Cloud Storage (GCS) 上的 tables 和數據。
若要從 GCS 貯體讀取或寫入,您必須建立附加的服務帳戶,而且必須將貯體與服務帳戶產生關聯。 您可以使用您為服務帳戶 generate 的金鑰,直接連線到貯體。
使用Google雲端服務帳戶密鑰直接存取 GCS 貯體
若要直接讀取和寫入貯體,您可以設定 Spark 組態中定義的金鑰。
步驟 1:使用 Google Cloud Console Set Google Cloud 服務帳戶
您必須為 Azure Databricks 叢集建立服務帳戶。 Databricks 建議您對此服務帳戶授與執行其工作所需的最低權限。
在左側瀏覽窗格中,按一下 [IAM 和系統管理員]。
按一下 [服務帳戶]。
按一下 [+ 建立服務帳戶]。
輸入連結帳戶的名稱與描述。
按一下 [建立]。
按一下 [繼續]。
按一下 [完成]。
步驟 2:建立金鑰以直接存取 GCS 貯體
警告
您為服務帳戶 generate 所用的 JSON 金鑰是一個私鑰,只應該與授權用戶分享,因為它控制著您 Google Cloud 帳戶中數據集和資源的存取。
- 在 Google Cloud 控制台中,於 [服務帳戶] list裡,點擊新建立的帳戶。
- 在 [金鑰] 區段,按一下 [新增金鑰] > 建立新金鑰。
- 接受 JSON 金鑰類型。
- 按一下 [建立]。 金鑰檔案會下載到您的電腦。
步驟 3:設定 GCS 貯體
建立貯體
如果您還沒有貯體,請建立一個:
在左側瀏覽窗格中,按一下 [儲存體]。
按一下 [建立貯體]。
按一下 [建立]。
設定貯體
設定貯體詳細資料。
按一下 [權限] 索引標籤。
在 [權限] 標籤旁,按一下 [新增]。
從 雲端儲存角色中為貯體上的服務帳戶提供儲存體管理員權限。
按一下 [儲存]。
步驟 4:將服務帳戶金鑰放在 Databricks 祕密中
Databricks 建議使用秘密存取範圍來儲存所有 credentials。 您可以將金鑰 JSON 檔案中的私鑰和私鑰標識碼放入 Databricks 秘密範圍。 您可以在工作區中 grant 用戶、服務主體和群組,以讀取秘密範圍。 這可保護服務帳戶金鑰,同時允許使用者存取 GCS。 若要建立秘密範圍,請參閱 管理秘密。
步驟 5:設定 Azure Databricks 叢集
在 [Spark 組態] 索引標籤中,設定全域組態或每個貯體組態。 下列範例 set 密鑰,values 儲存為 Databricks 秘密。
注意
同時使用叢集存取控制和筆記本存取控制,以保護對 GCS 貯體中服務帳戶和資料的存取權限。 請參閱計算權限和使用 Databricks 筆記本的共同作業。
全域組態
如果提供的 credentials 是用來存取所有 bucket,請使用此設定。
spark.hadoop.google.cloud.auth.service.account.enable true
spark.hadoop.fs.gs.auth.service.account.email <client-email>
spark.hadoop.fs.gs.project.id <project-id>
spark.hadoop.fs.gs.auth.service.account.private.key {{secrets/scope/gsa_private_key}}
spark.hadoop.fs.gs.auth.service.account.private.key.id {{secrets/scope/gsa_private_key_id}}
將 <client-email>
、<project-id>
取代為金鑰 JSON 檔案中欄位名稱的 values。
每個貯體組態
如果您必須針對特定儲存桶設定 credentials,請使用此設定。 每個貯體組態的語法會將貯體名稱附加至每個組態的結尾,如下列範例所示。
重要
除了全域組態之外,還可以使用個別貯體組態。 指定時,每個貯體組態會取代全域組態。
spark.hadoop.google.cloud.auth.service.account.enable.<bucket-name> true
spark.hadoop.fs.gs.auth.service.account.email.<bucket-name> <client-email>
spark.hadoop.fs.gs.project.id.<bucket-name> <project-id>
spark.hadoop.fs.gs.auth.service.account.private.key.<bucket-name> {{secrets/scope/gsa_private_key}}
spark.hadoop.fs.gs.auth.service.account.private.key.id.<bucket-name> {{secrets/scope/gsa_private_key_id}}
將 <client-email>
、<project-id>
取代為金鑰 JSON 檔案中那些確切欄位名稱的 values。
步驟 6:從 GCS 讀取
若要從 GCS 貯體讀取,請使用任何支援格式的 Spark 讀取命令,例如:
df = spark.read.format("parquet").load("gs://<bucket-name>/<path>")
若要寫入 GCS 貯體,請使用任何支援格式的 Spark 寫入命令,例如:
df.write.mode("<mode>").save("gs://<bucket-name>/<path>")
將 <bucket-name>
取代為您在步驟 3:設定 GCS 貯體時建立的貯體名稱。