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

通过ADF执行Databricks Notebook访问存储遇配置初始化错误求助

ADF调用Databricks Notebook访问ADLS时的权限错误问题

我正在使用Azure Data Factory(ADF)中的notebook任务执行Databricks作业,此前的copy活动已成功将数据写入存储,但在Databricks中尝试读取该数据时出现以下错误:

Py4JJavaError: An error occurred while calling o393.load.
: Failure to initialize configuration for storage account $DATALAKENAME.dfs.core.windows.net: Invalid configuration value detected for fs.azure.account.keyInvalid configuration value detected for fs.azure.account.key
    at shaded.databricks.azurebfs.org.apache.hadoop.fs.azurebfs.services.SimpleKeyProvider.getStorageAccountKey(SimpleKeyProvider.java:52)
    at shaded.databricks.azurebfs.org.apache.hadoop.fs.azurebfs.AbfsConfiguration.getStorageAccountKey(AbfsConfiguration.java:715)
    at shaded.databricks.azurebfs.org.apache.hadoop.fs.azurebfs.AzureBlobFileSystemStore.initializeClient(AzureBlobFileSystemStore.java:2084)
    at shaded.databricks.azurebfs.org.apache.hadoop.fs.azurebfs.AzureBlobFileSystemStore.(AzureBlobFileSystemStore.java:272)
...

已完成的配置步骤:

  • 通过Databricks访问连接器在Unity Catalog(UC)中定义了存储凭据
  • 针对目标abfss://文件路径定义了外部位置
  • 为我的用户账户和Data Factory托管标识(MSI)授予了外部位置的READ FILES和WRITE FILES权限
  • 为Databricks访问连接器授予了存储账户的Storage Blob Data Contributor角色
  • 为Data Factory授予了Databricks工作区的Contributor角色

关键场景:在用户上下文下交互式运行Notebook时可正常读取数据,仅通过ADF执行时出现错误,确认通过访问连接器/外部位置的存储身份验证逻辑是有效的。我不想启用基于访问密钥的存储账户身份验证作为临时解决方法。


解决方案

1. 确保ADF调用Databricks作业时使用Unity Catalog身份

在ADF的Notebook任务配置中:

  • 启用使用Unity Catalog选项
  • 确认作业运行身份指定为Data Factory的MSI,或作业关联的集群已配置为使用UC身份验证

2. 检查Databricks集群配置

  • 集群必须启用Unity Catalog,避免在集群配置(如Spark配置)中硬编码存储账户的访问密钥(该配置会覆盖UC的身份验证逻辑)
  • 确保集群的运行策略允许访问目标外部位置

3. 验证ADF MSI的UC权限生效

在Databricks SQL中执行以下命令,确认ADF的MSI已被正确授予外部位置权限:

SHOW GRANTS ON EXTERNAL LOCATION <your_external_location_name>;

确保输出中包含ADF MSI的READ FILES和WRITE FILES权限记录

4. 使用外部位置别名访问数据

在Notebook中,优先通过外部位置名称而非直接的abfss路径访问数据,例如:

# 推荐方式:使用外部位置别名
df = spark.read.parquet("external_location:/your/data/path")

# 避免直接使用abfss路径
# df = spark.read.parquet("abfss://container@$DATALAKENAME.dfs.core.windows.net/your/data/path")

这种方式会强制触发Unity Catalog的身份验证流程,避免使用访问密钥的逻辑被误触发


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:06:10