連線至 Azure Data Lake Storage Gen2 和 Blob 儲存體

注意

本文說明設定 Azure Data Lake 儲存體 Gen2 存取的舊版模式。 Databricks 建議使用 Unity 目錄來設定 Azure Data Lake 儲存體 Gen2 和磁碟區的存取權,以便直接與檔案互動。 請參閱使用 Unity 目錄將 連線 至雲端物件記憶體。

本文說明如何從 Azure Databricks 連線到 Azure Data Lake 儲存體 Gen2 和 Blob 儲存體。

注意

使用 Azure 認證 連線 至 Azure Data Lake 儲存體 Gen2 或 Blob 儲存體

下列認證可用來存取 Azure Data Lake 儲存體 Gen2 或 Blob 儲存體:

  • OAuth 2.0 搭配 Microsoft Entra ID 服務主體:D atabricks 建議使用 Microsoft Entra ID 服務主體來連線到 Azure 記憶體。 若要建立 Microsoft Entra ID 服務主體並提供其 Azure 儲存器帳戶的存取權,請參閱 使用服務主體存取具有 Microsoft Entra ID(先前稱為 Azure Active Directory)的記憶體。

    若要建立 Microsoft Entra ID 服務主體,您必須擁有 Application Administrator Microsoft Entra ID 中的角色或 Application.ReadWrite.All 許可權(先前稱為 Azure Active Directory)。 若要在儲存體帳戶上指派角色,您必須是儲存體帳戶上具有使用者存取管理員 Azure RBAC 角色的擁有者或使用者。

  • 共用存取簽章 (SAS):您可以使用記憶體 SAS 令牌 來存取 Azure 記憶體。 透過 SAS,您可以使用暫存令牌搭配更細緻的訪問控制來限制對記憶體帳戶的存取。

    您只能自行授與記憶體帳戶、容器或檔案上所擁有的SAS令牌許可權。

  • 帳戶金鑰:您可以使用記憶體帳戶存取金鑰來管理 Azure 儲存體 的存取權。 儲存體帳戶存取金鑰提供儲存體帳戶設定以及資料的完整存取權。 Databricks 建議使用 Microsoft Entra ID 服務主體或 SAS 令牌來聯機到 Azure 記憶體,而不是帳戶密鑰。

    若要檢視帳戶的存取金鑰,您必須在記憶體帳戶上擁有擁有者、參與者或 儲存體 帳戶密鑰操作員服務角色。

Databricks 建議使用秘密範圍來儲存所有認證。 您可以授與工作區存取權中的使用者、服務主體和群組,以讀取秘密範圍。 這可保護 Azure 認證,同時允許使用者存取 Azure 記憶體。 若要建立秘密範圍,請參閱 秘密範圍

設定 Spark 屬性以設定 Azure 認證以存取 Azure 記憶體

您可以設定 Spark 屬性來設定 Azure 認證來存取 Azure 記憶體。 認證的範圍可以設定為叢集或筆記本。 同時使用叢集訪問控制和筆記本訪問控制來保護對 Azure 記憶體的存取。 請參閱使用 Databricks 筆記本計算許可權和共同作業。

注意

Microsoft Entra ID 服務主體也可用來從 SQL 倉儲存取 Azure 記憶體,請參閱 啟用數據存取設定

若要設定 Spark 屬性,請在叢集的 Spark 組態或筆記本中使用下列代碼段:

Azure 服務主體

使用下列格式來設定叢集 Spark 組態:

spark.hadoop.fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net OAuth
spark.hadoop.fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.windows.net org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider
spark.hadoop.fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.windows.net <application-id>
spark.hadoop.fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.windows.net {{secrets/<secret-scope>/<service-credential-key>}}
spark.hadoop.fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.windows.net https://login.microsoftonline.com/<directory-id>/oauth2/token

您可以在 spark.conf.set 筆記本中使用,如下列範例所示:

service_credential = dbutils.secrets.get(scope="<secret-scope>",key="<service-credential-key>")

spark.conf.set("fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net", "OAuth")
spark.conf.set("fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
spark.conf.set("fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.windows.net", "<application-id>")
spark.conf.set("fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.windows.net", service_credential)
spark.conf.set("fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.windows.net", "https://login.microsoftonline.com/<directory-id>/oauth2/token")

Replace

  • <secret-scope> 具有 Databricks 秘密範圍名稱。
  • <service-credential-key> 包含客戶端密碼的金鑰名稱。
  • <storage-account> 具有 Azure 記憶體帳戶的名稱。
  • <application-id>具有 Microsoft Entra ID 應用程式的應用程式(用戶端)標識碼
  • <directory-id>具有 Microsoft Entra ID 應用程式的目錄(租用戶)標識碼。

Sas 權杖

您可以在相同的 Spark 工作階段中設定多個記憶體帳戶的 SAS 令牌。

spark.conf.set("fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net", "SAS")
spark.conf.set("fs.azure.sas.token.provider.type.<storage-account>.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.sas.FixedSASTokenProvider")
spark.conf.set("fs.azure.sas.fixed.token.<storage-account>.dfs.core.windows.net", dbutils.secrets.get(scope="<scope>", key="<sas-token-key>"))

Replace

  • <storage-account>具有 Azure 儲存體 帳戶名稱。
  • <scope> 具有 Azure Databricks 秘密範圍名稱。
  • <sas-token-key> 包含 Azure 記憶體 SAS 令牌的金鑰名稱。

帳戶金鑰

spark.conf.set(
    "fs.azure.account.key.<storage-account>.dfs.core.windows.net",
    dbutils.secrets.get(scope="<scope>", key="<storage-account-access-key>"))

Replace

  • <storage-account>具有 Azure 儲存體 帳戶名稱。
  • <scope> 具有 Azure Databricks 秘密範圍名稱。
  • <storage-account-access-key> 包含 Azure 記憶體帳戶存取金鑰的金鑰名稱。

存取 Azure 記憶體

正確設定認證以存取 Azure 記憶體容器之後,您就可以使用 URI 與記憶體帳戶中的資源互動。 Databricks 建議使用 abfss 驅動程序來獲得更高的安全性。

spark.read.load("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<path-to-data>")

dbutils.fs.ls("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<path-to-data>")
CREATE TABLE <database-name>.<table-name>;

COPY INTO <database-name>.<table-name>
FROM 'abfss://container@storageAccount.dfs.core.windows.net/path/to/folder'
FILEFORMAT = CSV
COPY_OPTIONS ('mergeSchema' = 'true');

範例筆記本

ADLS Gen2 OAuth 2.0 與 Microsoft Entra ID (先前稱為 Azure Active Directory) 服務主體筆記本

取得筆記本

Azure Data Lake 儲存體 Gen2 已知問題

如果您嘗試存取透過 Azure 入口網站 建立的記憶體容器,您可能會收到下列錯誤:

StatusCode=404
StatusDescription=The specified filesystem does not exist.
ErrorCode=FilesystemNotFound
ErrorMessage=The specified filesystem does not exist.

啟用階層命名空間時,您不需要透過 Azure 入口網站 建立容器。 如果您看到此問題,請透過 Azure 入口網站 刪除 Blob 容器。 幾分鐘后,您就可以存取容器。 或者,您可以變更 URI abfss 以使用不同的容器,只要此容器不是透過 Azure 入口網站 建立。

請參閱 Microsoft 檔中的 Azure Data Lake 儲存體 Gen2 已知問題。

從 Azure Databricks 儲存和存取資料的模式已遭淘汰

以下是已被取代的記憶體模式: