連線到 Azure Data Lake Storage 和 Blob 儲存體

重要

此文件已停用,且可能不會更新。

本文說明設定 Azure Data Lake Storage 存取權的舊版模式。 Databricks 建議使用 Unity 目錄來設定 Azure Data Lake Storage 和磁碟區的存取權,以便直接與檔案互動。 請參閱在 Unity 目錄中使用 Azure 受控識別來存取儲存體。

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

注意

舊版 Windows Azure 儲存體 Blob 驅動程式 (WASB) 已被取代。 ABFS 對 WASB 有許多好處。 請參閱 ABFS 上的 Azure 文件。 如需使用舊版 WASB 驅動程式的文件,請參閱使用 WASB 連線到 Azure Blob 儲存體 (舊版)。

步驟 1:註冊 Microsoft Entra ID 應用程式

使用 Microsoft Entra ID 註冊應用程式會建立可用來提供 Azure 儲存帳戶存取權的服務主體。

若要註冊Microsoft Entra ID 應用程式,您必須具有 Application Administrator Microsoft Entra ID 中的角色或 Application.ReadWrite.All 許可權。

  1. 在 Azure 入口網站 中,移至 Microsoft Entra ID 服務。
  2. 在 [管理] 底下,按兩下 [應用程式註冊]。
  3. 按兩下 [ + 新增註冊]。 為應用程式輸入唯一名稱,並按下 [註冊]。
  4. 按兩下 [ 憑證與秘密]。
  5. 按兩下 [+ 新增客戶端密碼]。
  6. 新增秘密的描述,然後按兩下 [ 新增]。
  7. 複製並儲存新秘密的值。
  8. 在應用程式註冊概觀中,複製並儲存 應用程式 (用戶端) 識別碼 和 目錄 (租使用者) 識別碼。

步驟 2:將角色分配給服務負責人

您可以將角色指派給與記憶體帳戶相關聯的Microsoft Entra ID 應用程式註冊,來控制對記憶體資源的存取。 您可能需要根據特定需求指派其他角色。

若要在記憶體帳戶上指派角色,您必須在記憶體帳戶上擁有擁有者或使用者存取系統管理員 Azure RBAC 角色。

  1. 在Azure入口網站,請前往 Storage accounts 服務。
  2. 選取要搭配此應用程式註冊使用的 Azure 記憶體帳戶。
  3. 按下 [存取控制 (IAM)]。
  4. 單擊 + 新增,然後從下拉功能表中選取 新增角色指派。
  5. 將 [Select] 欄位設定為 Microsoft Entra ID 應用程式名稱,並將 [角色] 設定為 [儲存體 Blob 數據貢獻者]。
  6. 點選 [儲存]。

步驟3:在Azure Databricks中配置Azure憑證

用你想存取的 Azure 儲存帳號的憑證,設定你的 Azure Databricks 叢集或筆記本。

支援的憑證類型與秘密儲存

下列認證可用來存取 Azure Data Lake Storage 或 Blob 記憶體:

  • 具有Microsoft Entra ID 服務主體的 OAuth 2.0:D atabricks 建議使用 Microsoft Entra ID 服務主體來連線到 Azure Data Lake Storage。 若要建立 Microsoft Entra ID 服務主體並提供 Azure 儲存帳號存取權,請完成上述步驟 1 和 2。

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

    重要

    Blob 儲存體不支援 Microsoft Entra ID 服務主體。

  • 共用存取簽章 (SAS):您可以使用儲存體 SAS 權杖 來存取 Azure 儲存體。 透過 SAS,您可以使用暫存權杖搭配更細緻的存取控制來限制對儲存體帳戶的存取。

    您只能自行授與儲存體帳戶、容器或檔案上所擁有的 SAS 權杖權限。

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

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

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

注意

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

設定 Spark 屬性以設定 Azure 認證

你可以設定 Spark 屬性來設定 Azure 憑證以存取 Azure 儲存。 認證資訊的適用範圍可設定為叢集或筆記本。 同時使用叢集存取控制和筆記本存取控制來保護對 Azure 儲存體的存取。 請參閱運算權限和使用 Databricks 筆記本協同作業。

Warning

Hive 元儲存庫用戶端會忽略在筆記本層級設定的 Spark 會話設定。 如果你在筆記本中使用 spark.conf.set() 設定 Azure 儲存體認證,這些認證會適用於該筆記本中的 Spark 作業,但不適用於 Hive 中繼存放區作業,例如 ALTER TABLE ... SET LOCATION。 對於需要 Azure 儲存存取的 Hive DDL,請在叢集的 Spark 設定中設定憑證,而不是在筆記本裡。

若要設定 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")

替換

  • 具有 Databricks 祕密範圍名稱的 <secret-scope>。
  • 填入包含用戶端密碼之金鑰的名稱 <service-credential-key>。
  • 具有 Azure 儲存體帳戶名稱的 <storage-account>。
  • <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>"))

替換

  • 將 <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>"))

替換

  • 將 <storage-account> 替換為 Azure 儲存體帳戶名稱。
  • <scope> 使用 Azure Databricks 秘密範圍名稱。
  • <storage-account-access-key>,其中名稱為包含 Azure 儲存體帳戶存取金鑰的金鑰名稱。

步驟 4:存取 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');

範例筆記本

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

拿筆記本

Azure Data Lake Storage 已知問題

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

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

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

請參閱 Microsoft 文件中的 Azure Data Lake Storage 已知問題。

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

以下是已被取代的儲存體模式: