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

Azure Databricks挂载成功后执行dbutils.fs.ls报错的解决咨询

解决Azure Databricks挂载点执行dbutils.fs.ls报错问题

问题重现

执行以下代码列出挂载点内容时:

dbutils.fs.ls('/mnt/dz/')

触发错误:

shaded.databricks.org.apache.hadoop.fs.azure.AzureException: java.util.NoSuchElementException: An error occurred while enumerating the result, check the original exception for details.

此前已通过SAS令牌完成挂载点创建,代码如下:

mountPoint = "/mnt/dz/"
if not any(mount.mountPoint == mountPoint for mount in dbutils.fs.mounts()):
  try:
    dbutils.fs.mount(
      source = "wasbs://{}@{}.blob.core.windows.net".format(blobContainerName, storageAccountName),
      mount_point = mountPoint,
      #extra_configs = {'fs.azure.account.key.' + storageAccountName + '.blob.core.windows.net': storageAccountAccessKey}
      extra_configs = {'fs.azure.sas.' + blobContainerName + '.' + storageAccountName + '.blob.core.windows.net': sasToken}
    )
    print("mount succeeded!")
  except Exception as e:
    print("mount exception", e)

排查与解决步骤

  • 验证SAS令牌的权限与有效性

    • 确认SAS令牌包含List权限(权限参数需包含l,这是执行ls操作的必要条件)。
    • 检查SAS令牌的过期时间(se字段),确保未超过当前时间。
    • 直接通过SAS令牌访问Blob容器的REST接口,验证是否能正常列出容器内内容。
  • 核对挂载配置的SAS格式

    • 确保extra_configs中的键格式正确:fs.azure.sas.<容器名>.<存储账户名>.blob.core.windows.net,检查容器名、存储账户名拼写无误。
    • 确认SAS令牌没有多余前缀(比如不要带?符号,仅保留令牌字符串本身)。
  • 重新挂载并清理缓存

    • 先卸载现有挂载点:
      dbutils.fs.unmount("/mnt/dz/")
      
    • 刷新挂载点缓存:
      dbutils.fs.refreshMounts()
      
    • 使用修正后的参数重新执行挂载代码,确保SAS令牌与配置完全正确。
  • 检查Blob容器状态

    • 登录Azure门户确认目标Blob容器是否有内容(空容器在部分Databricks版本中执行ls会触发类似错误)。
    • 排查容器内Blob是否存在单独的ACL设置,避免与容器SAS权限冲突。
  • 查看详细错误日志

    • 进入Databricks集群页面的“日志”选项卡,查看driver/logs下的日志文件,搜索AzureException或NoSuchElementException相关条目,获取原始异常的详细信息,定位具体问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 18:45:08