ADF通过链接服务创建带ABFSS存储初始化脚本的Databricks集群时遇文件未找到错误求助
ADF通过链接服务创建带ABFSS存储初始化脚本的Databricks集群时遇文件未找到错误求助
我来帮你解决这个问题!之前我也碰到过类似的情况——ADF的Databricks链接服务UI确实没有直接提供选择初始化脚本位置类型的选项,但我们可以通过手动配置集群的JSON参数来绕开这个限制,顺利使用ABFSS存储的初始化脚本。
问题根源
Databricks弃用DBFS初始化脚本后,我们需要切换到ABFSS这类外部存储的脚本,但ADF的默认集群配置UI没有暴露“脚本位置类型”的选项,导致集群仍按DBFS的逻辑解析路径,自然找不到ABFSS里的文件。
具体解决步骤
1. 先确保Databricks集群能访问你的ABFSS存储
你需要给集群配置访问ABFSS的认证信息,推荐用Azure AD服务主体来做身份验证:
- 在集群的Spark配置里添加以下参数(替换成你的存储账户、服务主体信息):
fs.azure.account.auth.type.<你的存储账户名>.dfs.core.windows.net OAuth fs.azure.account.oauth.provider.type.<你的存储账户名>.dfs.core.windows.net org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider fs.azure.account.oauth2.client.id.<你的存储账户名>.dfs.core.windows.net <你的服务主体ID> fs.azure.account.oauth2.client.secret.<你的存储账户名>.dfs.core.windows.net <你的服务主体密钥> fs.azure.account.oauth2.client.endpoint.<你的存储账户名>.dfs.core.windows.net https://login.microsoftonline.com/<你的租户ID>/oauth2/token - 同时要确认:服务主体对目标容器有读取权限;如果存储账户设置了VNet/防火墙限制,要把Databricks集群所在的VNet加入允许访问列表。
2. 在ADF中手动用JSON配置集群初始化脚本
ADF的UI没显示位置类型选项,但我们可以通过自定义集群配置的JSON来指定ABFSS类型的脚本:
- 在ADF的Databricks活动(比如Notebook活动)里,选择“新建集群”,然后在“集群配置”中切换到“自定义”模式。
- 点击“编辑JSON”,把以下结构添加到配置里(替换成你的ABFSS路径和认证参数):
{ "init_scripts": [ { "abfss": { "destination": "abfss://<容器名>@<存储账户名>.dfs.core.windows.net/<脚本所在路径>/your-init-script.sh" } } ], "spark_conf": { "fs.azure.account.auth.type.<你的存储账户名>.dfs.core.windows.net": "OAuth", "fs.azure.account.oauth.provider.type.<你的存储账户名>.dfs.core.windows.net": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider", "fs.azure.account.oauth2.client.id.<你的存储账户名>.dfs.core.windows.net": "<服务主体ID>", "fs.azure.account.oauth2.client.secret.<你的存储账户名>.dfs.core.windows.net": "<服务主体密钥>", "fs.azure.account.oauth2.client.endpoint.<你的存储账户名>.dfs.core.windows.net": "https://login.microsoftonline.com/<租户ID>/oauth2/token" } } - 保存配置后运行Pipeline,集群启动时就会自动从ABFSS路径拉取并执行初始化脚本了。
3. 验证与排查
- 先确认ABFSS路径完全正确:容器名、存储账户名、脚本路径、文件名都区分大小写,别拼错。
- 可以先在Databricks工作区手动创建一个集群,用同样的ABFSS脚本路径和Spark配置,确认集群能正常启动并执行脚本,排除存储权限或路径本身的问题。
- 如果还是报错,去Databricks集群的“日志”标签里找初始化脚本的日志,看具体是权限不足还是路径错误。
备注:内容来源于stack exchange,提问作者Ancil Pa
相关产品推荐
相关产品推荐

