You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用托管标识连接Azure Databricks与ADLS Gen2并实现文件管理?

使用托管标识在Azure Databricks中直接读写管理ADLS Gen2文件的方案

默认情况下,Unity Catalog绑定的托管标识仅用于元数据存储的管理,Notebook会话不会自动复用该标识访问ADLS Gen2文件。要实现通过托管标识在Notebook中直接操作ADLS文件,可按以下步骤配置:

1. 为托管标识配置ADLS Gen2权限

前往Azure门户,找到目标ADLS Gen2存储账户:

  • 进入访问控制(IAM)页面,添加角色分配,给Unity Catalog的托管标识分配存储Blob数据参与者(或按需分配更细粒度的权限,如读取Blob、写入Blob、删除Blob等)。
  • 权限作用范围可设置为整个存储账户、特定容器或具体路径,根据实际需求选择。

2. 在Databricks中配置访问方式

方式一:使用Unity Catalog外部位置(推荐)

通过创建外部位置统一管理存储路径与权限,符合Unity Catalog的治理规范:

  1. 先基于托管标识创建Unity Catalog凭据(未创建时执行):
    CREATE CREDENTIAL mi_credential
    WITH IDENTITY = 'Managed Identity',
    SECRET = '<managed-identity-client-id>';
    
  2. 创建指向ADLS Gen2路径的外部位置:
    CREATE EXTERNAL LOCATION adls_managed_location
    URL 'abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<target-path>'
    WITH (CREDENTIAL mi_credential);
    
  3. 给需要操作文件的用户/组分配外部位置权限:
    -- 分配读写文件权限
    GRANT READ FILES, WRITE FILES ON EXTERNAL LOCATION adls_managed_location TO `<user-or-group-name>`;
    -- 如需创建外部表,可额外分配CREATE权限
    GRANT CREATE ON EXTERNAL LOCATION adls_managed_location TO `<user-or-group-name>`;
    
  4. 在Notebook中直接使用该路径操作文件:
    # 列出目录下文件
    dbutils.fs.ls("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<target-path>")
    # 读取文件
    df = spark.read.csv("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<target-path>/data.csv")
    # 写入文件
    df.write.parquet("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<target-path>/output.parquet")
    

方式二:在Notebook会话中直接配置托管标识访问

如果不需要统一的权限治理,可直接在Notebook中配置Spark会话使用托管标识:

# 替换占位符为实际的存储账户ID、租户ID、托管标识客户端ID
storage_account = "<storage-account-name>"
tenant_id = "<azure-tenant-id>"
mi_client_id = "<managed-identity-client-id>"

# 配置Spark属性
spark.conf.set(f"fs.azure.account.auth.type.{storage_account}.dfs.core.windows.net", "OAuth")
spark.conf.set(f"fs.azure.account.oauth.provider.type.{storage_account}.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
spark.conf.set(f"fs.azure.account.oauth2.client.id.{storage_account}.dfs.core.windows.net", mi_client_id)
spark.conf.set(f"fs.azure.account.oauth2.client.endpoint.{storage_account}.dfs.core.windows.net", f"https://login.microsoftonline.com/{tenant_id}/oauth2/token")
spark.conf.set(f"fs.azure.account.oauth2.client.secret.{storage_account}.dfs.core.windows.net", "")

配置完成后,即可使用dbutils.fs或Spark API直接操作ADLS Gen2文件。

3. 验证配置

执行简单的文件操作命令确认权限生效:

# 写入测试文件
dbutils.fs.put("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/test.txt", "test content", overwrite=True)
# 列出文件
display(dbutils.fs.ls("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/"))

注意事项

  • 托管标识的IAM权限分配后,可能需要5-10分钟才能生效。
  • 优先使用外部位置方式,便于统一管理存储路径和权限,符合Unity Catalog的数据治理要求。
  • 如需集群所有会话默认使用该托管标识,可将上述Spark配置添加到集群的Spark配置中,无需在每个Notebook重复配置。

内容的提问来源于stack exchange,提问作者Adhash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 16:32:23