Databricks挂载ADLS Gen2后缺失所有子文件夹及文件问题咨询
排查步骤
首先修正文件列表查询的路径写法
你当前执行的查询命令路径缺少根目录前导斜杠,属于相对路径写法,会导致查询路径不匹配,将命令修改为绝对路径即可:%fs ls "/mnt/files"也可以用python接口直接查询验证:
display(dbutils.fs.ls("/mnt/files"))不带前导
/的路径会默认从当前Notebook绑定的工作区用户个人目录下寻址,返回结果和挂载的存储路径无关。校验挂载使用的服务主体权限
挂载配置里的OAuth服务主体,必须同时满足以下权限要求,否则会出现仅能看到部分有权限目录的问题:- 在ADLS Gen2对应的存储账户、容器或者ARCHIVE目录层级,分配存储Blob数据读取者及以上的数据平面角色(仅分配Azure资源管理层面的所有者、参与者角色无效,这类角色不包含存储数据层访问权限)
- 针对ARCHIVE目录下所有需要访问的子文件夹、文件,给服务主体授予读取+执行的ACL权限,若配置了ACL权限未开继承,需要单独给每个子目录补配权限,否则无权限的目录不会出现在列表结果里。
额外说明:你挂载configs里配置的
spark.databricks.sqldw.jdbc.service.principal.client.id和spark.databricks.sqldw.jdbc.service.principal.client.secret两个参数是用于Azure Synapse SQL池JDBC连接的配置,和ADLS Gen2挂载逻辑无关,不会影响目录枚举结果,可以删除减少冗余配置。清除挂载缓存重新验证
如果是挂载完成后才在存储端上传的新文件/文件夹,先执行挂载刷新命令清除缓存:dbutils.fs.refreshMounts()若之前对同一路径执行过重复挂载,先卸载旧挂载点再重新执行挂载逻辑,避免旧配置残留:
dbutils.fs.unmount("/mnt/files") # 卸载完成后重新运行你的挂载代码即可校验存储账户基础配置
确认ADLS Gen2账户已经开启**分层命名空间(HNS)**功能,未开启HNS的存储账户挂载到Databricks时,会因为目录结构模拟逻辑的问题出现枚举不全;同时确认未显示的文件夹不属于软删除状态、不是存放在归档访问层的未解冻blob。
典型现象匹配:存储端ARCHIVE目录下存在多个子目录,Databricks查询仅返回单个文件夹,90%以上的同类问题都是路径写错、服务主体缺数据平面/ACL权限导致的。
内容的提问来源于stack exchange,提问作者user774952

