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

使用目录级用户委托SAS令牌在PySpark写入Delta表遇认证错误

目录级用户委托SAS令牌Spark认证错误解决方案

使用目录级用户委托SAS令牌配置Spark访问Azure Blob存储时触发认证错误,但容器级SAS令牌可正常工作,且目录级令牌已包含读取、添加、创建、写入、列出、移动、执行权限,可按以下方案排查解决:

  • 修正Spark配置参数
    目录级SAS令牌不能使用容器级的配置参数,需改用路径级配置格式:
    配置参数需指定具体目录路径,格式为fs.azure.sas.<container>.<storage-account>.blob.core.windows.net/<directory-path>
    修改后的示例配置:

    spark.conf.set("fs.azure", "org.apache.hadoop.fs.azure.NativeAzureFileSystem")
    spark.conf.set("fs.azure.account.auth.type", "SAS")
    // 替换<directory-path>为实际目标目录路径
    spark.conf.set("fs.azure.sas.<mycontainer>.<mystorageaccountname>.blob.core.windows.net/<directory-path>", sas_token)
    
  • 验证SAS令牌的权限范围

    • 确认创建SAS时已明确将目标目录路径设为资源范围,而非整个容器
    • 检查令牌有效期,确保未过期
    • 核对令牌权限与Spark实际操作的匹配性(如写入操作需w、c权限,读取需r、l权限)
  • 检查Hadoop Azure文件系统版本兼容性

    • 旧版本Hadoop Azure客户端对目录级SAS支持存在缺陷,建议使用Hadoop 3.3.0及以上版本的hadoop-azure包
    • Databricks环境需使用Runtime 10.3及以上版本,对目录级用户委托SAS支持更完善
  • 避免路径格式错误
    Spark访问存储路径需严格匹配SAS令牌的目录范围:
    例如SAS令牌针对container/dir1/dir2,则访问路径应为wasbs://<mycontainer>@<mystorageaccountname>.blob.core.windows.net/dir1/dir2/,禁止访问该目录以外的路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 04:24:56