重要
本文档已停用,可能不会更新。
本文介绍用于配置对Azure Data Lake Storage的访问的旧模式。 Databricks 建议使用 Unity Catalog 来配置对 Azure Data Lake Storage 和卷的访问权限,以便直接与文件进行交互。 请参阅 使用 Unity 目录中的Azure托管标识访问存储。
本文介绍如何从Azure Databricks连接到Azure Data Lake Storage和Blob Storage。
注释
- 旧版Windows Azure Storage Blob 驱动程序(WASB)已弃用。 与 WASB 相比,ABFS 具有许多优势。 请参阅有关 ABFS 的 Azure 文档。 有关旧版 WASB 驱动程序的使用文档,请参阅 使用 WASB(旧版)连接到 Azure Blob 存储。
使用Azure凭据连接到Azure Data Lake Storage或Blob Storage
以下凭据可用于访问Azure Data Lake Storage或Blob Storage:
OAuth 2.0 与Microsoft Entra ID服务主体:Databricks 建议使用Microsoft Entra ID服务主体连接到Azure Data Lake Storage。 若要创建 Microsoft Entra ID 服务主体并提供对 Azure 存储帐户的访问权限,请参阅 使用服务主体访问存储和 Microsoft Entra ID(Azure Active Directory)。
若要创建Microsoft Entra ID服务主体,必须在Microsoft Entra ID中具有
Application Administrator角色或Application.ReadWrite.All权限。 若要在存储帐户上分配角色,你必须是具有存储帐户上“用户访问管理员”Azure RBAC 角色的所有者或用户。重要
Blob 存储不支持Microsoft Entra ID服务主体。
共享访问签名(SAS):可以使用存储SAS 令牌访问Azure存储。 使用 SAS,你可以通过具有细粒度访问控制的临时令牌来限制对存储帐户的访问。
你只能授予自己对存储帐户、容器或文件所拥有的 SAS 令牌权限。
Account 密钥:可以使用 storage 帐户访问密钥来管理对Azure Storage的访问。 存储帐户访问密钥提供对存储帐户配置以及数据的完全访问权限。 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.chinacloudapi.cn OAuth
spark.hadoop.fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.chinacloudapi.cn org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider
spark.hadoop.fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.chinacloudapi.cn <application-id>
spark.hadoop.fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.chinacloudapi.cn {{secrets/<secret-scope>/<service-credential-key>}}
spark.hadoop.fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.chinacloudapi.cn https://login.chinacloudapi.cn/<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.chinacloudapi.cn", "OAuth")
spark.conf.set("fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.chinacloudapi.cn", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
spark.conf.set("fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.chinacloudapi.cn", "<application-id>")
spark.conf.set("fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.chinacloudapi.cn", service_credential)
spark.conf.set("fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.chinacloudapi.cn", "https://login.chinacloudapi.cn/<directory-id>/oauth2/token")
将
- 将
<secret-scope>替换为 Databricks 机密范围名称。 - 将
<service-credential-key>替换为包含客户端密码的密钥的名称。 -
<storage-account>,其名称为Azure存储帐户。 - Microsoft Entra ID应用程序的
<application-id>应用程序(客户端)ID。 - 具有 Microsoft Entra ID 应用程序的
<directory-id>。
SAS 令牌
可以在同一个 Spark 会话中为多个存储帐户配置 SAS 令牌。
spark.conf.set("fs.azure.account.auth.type.<storage-account>.dfs.core.chinacloudapi.cn", "SAS")
spark.conf.set("fs.azure.sas.token.provider.type.<storage-account>.dfs.core.chinacloudapi.cn", "org.apache.hadoop.fs.azurebfs.sas.FixedSASTokenProvider")
spark.conf.set("fs.azure.sas.fixed.token.<storage-account>.dfs.core.chinacloudapi.cn", dbutils.secrets.get(scope="<scope>", key="<sas-token-key>"))
将
- 具有Azure Storage帐户名称的
<storage-account>。 - 在
<scope>中使用 Azure Databricks 机密范围名称。 -
<sas-token-key>,其中包含Azure存储 SAS 令牌的密钥的名称。
帐户密钥
spark.conf.set(
"fs.azure.account.key.<storage-account>.dfs.core.chinacloudapi.cn",
dbutils.secrets.get(scope="<scope>", key="<storage-account-access-key>"))
将
- 具有Azure Storage帐户名称的
<storage-account>。 - 在
<scope>中使用 Azure Databricks 机密范围名称。 -
<storage-account-access-key>,其密钥名称包含Azure存储帐户访问密钥。
访问Azure存储
正确配置凭据以访问Azure存储容器后,可以使用 URI 与存储帐户中的资源进行交互。 Databricks 建议使用 abfss 驱动程序以获得更高的安全性。
spark.read.load("abfss://<container-name>@<storage-account-name>.dfs.core.chinacloudapi.cn/<path-to-data>")
dbutils.fs.ls("abfss://<container-name>@<storage-account-name>.dfs.core.chinacloudapi.cn/<path-to-data>")
CREATE TABLE <database-name>.<table-name>;
COPY INTO <database-name>.<table-name>
FROM 'abfss://container@storageAccount.dfs.core.chinacloudapi.cn/path/to/folder'
FILEFORMAT = CSV
COPY_OPTIONS ('mergeSchema' = 'true');
示例笔记本
ADLS OAuth 2.0,其中包含Microsoft Entra ID(以前为 Azure Active Directory) 服务主体笔记本
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门户创建的。
请参阅 Azure 文档中的 Azure Data Lake Storage 已知问题。
弃用的模式用于在Azure Databricks中存储和访问数据
下面是已弃用的存储模式:
Databricks 不再建议将外部数据位置装载到 Databricks 文件系统。 请参阅 在 Azure Databricks 上装载云对象存储。
Databricks 不再建议将凭据透传与 Azure Data Lake Storage 配合使用。 请参阅 使用 Microsoft Entra ID 凭据传递(旧版)访问 Azure Data Lake Storage。