共用方式為


連線至 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 建議您對此服務帳戶授與執行其工作所需的最低權限。

  1. 在左側瀏覽窗格中,按一下 [IAM 和系統管理員]

  2. 按一下 [服務帳戶]

  3. 按一下 [+ 建立服務帳戶]

  4. 輸入連結帳戶的名稱與描述。

    Google 為 GCS 建立服務帳戶

  5. 按一下 [建立]

  6. 按一下 [繼續]

  7. 按一下 [完成]

步驟 2:建立金鑰以直接存取 GCS 貯體

警告

您為服務帳戶 generate 所用的 JSON 金鑰是一個私鑰,只應該與授權用戶分享,因為它控制著您 Google Cloud 帳戶中數據集和資源的存取。

  1. 在 Google Cloud 控制台中,於 [服務帳戶] list裡,點擊新建立的帳戶。
  2. 在 [金鑰] 區段,按一下 [新增金鑰] > 建立新金鑰
  3. 接受 JSON 金鑰類型。
  4. 按一下 [建立]。 金鑰檔案會下載到您的電腦。

步驟 3:設定 GCS 貯體

建立貯體

如果您還沒有貯體,請建立一個:

  1. 在左側瀏覽窗格中,按一下 [儲存體]

  2. 按一下 [建立貯體]

    在 Google 網頁上搜尋「建立貯體」

  3. 按一下 [建立]

設定貯體

  1. 設定貯體詳細資料。

  2. 按一下 [權限] 索引標籤。

  3. 在 [權限] 標籤旁,按一下 [新增]

    在 Google 網頁上搜尋「Bucket 詳細資料」

  4. 從 雲端儲存角色中為貯體上的服務帳戶提供儲存體管理員權限。

    在 Google 網頁上搜尋「貯體權限」

  5. 按一下 [儲存]

步驟 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 貯體時建立的貯體名稱。

筆記本範例

從 Google Cloud Storage 筆記本讀取

Get 筆記本

寫入 Google Cloud Storage 筆記本

Get 筆記本