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

Ubuntu实例下PySpark写入WASB存储报不支持文件系统问题求助

解决非HDInsight环境下PySpark写入WASB的IO异常问题

没问题,我来帮你搞定这个在Azure N系列Ubuntu实例上的PySpark报错问题——本质是默认的Spark分发包没有包含Azure Blob Storage的适配驱动,咱们一步步来解决:

1. 确认你的Spark版本

首先得明确当前Spark的版本,因为不同Spark版本对应的Azure驱动版本必须严格匹配,否则会出现兼容性问题。执行以下命令查看版本:

spark-submit --version

2. 下载适配的Azure驱动包

你需要两个核心jar包:

  • hadoop-azure:负责实现Hadoop与Azure存储的交互逻辑
  • azure-storage:Azure存储的SDK依赖,供hadoop-azure调用

下面是常见Spark版本对应的驱动版本组合:

  • Spark 2.4.x → hadoop-azure 2.7.7 + azure-storage 6.1.0
  • Spark 3.1.x → hadoop-azure 3.2.0 + azure-storage 8.6.6
  • Spark 3.3.x → hadoop-azure 3.3.4 + azure-storage 8.6.6

你可以从Maven中央仓库搜索对应版本的jar包下载到本地。

3. 让Spark加载这些驱动包

有两种方式让Spark识别并加载这些驱动:

  • 方式一(永久生效):把下载好的jar包移动到Spark的默认jars目录中,这样每次启动Spark都会自动加载:
mv hadoop-azure-xxx.jar azure-storage-xxx.jar $SPARK_HOME/jars/

(注意替换命令中的xxx为你下载的实际版本号)

  • 方式二(临时生效,仅当前任务):在提交PySpark任务时,通过--jars参数指定驱动包的本地路径:
spark-submit --jars /path/to/hadoop-azure-xxx.jar,/path/to/azure-storage-xxx.jar your_pyspark_script.py

4. 配置Spark的Azure存储访问权限

在你的PySpark代码中,必须配置存储账户的访问凭证(密钥或SAS Token),同时注意WASB地址需要补全存储账户名,正确格式为:wasb://<容器名>@<存储账户名>.blob.core.windows.net/<路径>。

示例1:使用存储账户密钥

from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .appName("WriteToWASB") \
    # 替换为你的存储账户名和对应的访问密钥
    .config("fs.azure.account.key.your-storage-account-name.blob.core.windows.net", "your-storage-account-key") \
    .getOrCreate()

# 执行写入操作,注意补全完整的WASB地址
spark.write.save(
    'wasb://containername@your-storage-account-name.blob.core.windows.net/path',
    format='json',
    mode='append'
)

示例2:使用SAS Token(更安全,适合临时权限场景)

spark = SparkSession.builder \
    .appName("WriteToWASB") \
    # 替换为你的存储账户名、容器名和SAS Token(注意不要带开头的?)
    .config("fs.azure.sas.containername.your-storage-account-name.blob.core.windows.net", "your-sas-token") \
    .getOrCreate()

5. 验证配置是否生效

在执行写入操作前,可以先尝试读取Blob容器中的一个测试文件,确认驱动和权限配置都正常:

df = spark.read.text('wasb://containername@your-storage-account-name.blob.core.windows.net/test.txt')
df.show()

如果能正常输出文件内容,说明配置没问题,再执行写入操作即可。

额外注意事项

  • 确保你的Ubuntu实例有网络权限访问Azure Blob Storage:检查实例的NSG规则是否允许出站到*.blob.core.windows.net的443端口(HTTPS)。
  • 如果你的存储是ADLS Gen2,更推荐使用abfss://协议(性能更优),但如果必须使用WASB,上述方法同样适用。
  • 务必严格匹配驱动版本,版本不匹配会抛出各种IO异常或类找不到的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:47:04