无需服务主体与AD应用注册,Databricks能否挂载ADLS Gen2?
无需服务主体挂载ADLS Gen2的解决方案
核心结论
可以不用注册Azure AD应用/服务主体,通过Azure Databricks的凭据传递功能实现ADLS Gen2的挂载或直接访问,但你遇到的IllegalArgumentException: Unsupported Azure Scheme: abfss错误是因为配置或使用方式有误,具体解决步骤如下:
错误原因分析
该错误通常出现在以下场景:
- 集群未启用ADLS凭据传递功能
- 挂载时的配置参数不符合凭据传递的要求
- 存储账户的命名或路径格式存在问题
具体解决步骤
1. 启用集群的凭据传递
创建或编辑集群时,进入「高级选项」→「凭据传递」,勾选「启用Azure Data Lake Storage凭据传递」,重启集群后生效。
2. 修正挂载代码(无需服务主体)
凭据传递模式下,挂载不需要指定extra_configs(系统会自动使用当前登录Databricks的用户身份),修正后的代码示例:
def check_mount(mount_point): mounts = dbutils.fs.mounts() return any(mount.mountPoint == mount_point for mount in mounts) mount = "/mnt/adls-gen2" Lake = "<你的存储账户名>" if check_mount(mount): resultMsg = f"<div>{mount} 已挂载。</div>" else: dbutils.fs.mount( source = f"abfss://root@{Lake}.dfs.core.windows.net/", mount_point = mount ) resultMsg = f"<div>{mount} 挂载成功。</div>" print(resultMsg)
3. 确保用户权限
当前登录Databricks的用户需要在Azure AD中拥有ADLS Gen2存储账户/容器的对应权限(比如「存储Blob数据参与者」或更细粒度的权限),否则会出现权限不足的错误。
4. 替代方案:直接访问(无需挂载)
如果不需要挂载,也可以直接用abfss路径结合凭据传递访问数据,示例:
df = spark.read.csv("abfss://root@<存储账户名>.dfs.core.windows.net/path/to/data.csv")
注意事项
- 凭据传递仅支持Databricks Runtime 5.5及以上版本
- 若使用Azure Databricks Premium层,可结合Unity Catalog进一步简化权限管理
内容的提问来源于stack exchange,提问作者Patterson
相关产品推荐
相关产品推荐

