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

本地Spark写入Azure Blob存储报错:请求输入无效

Spark写入Azure Blob Storage报错解决方案

问题描述

本地运行Spark程序可正常读取Azure Blob Storage数据,但写入时抛出错误,核心报错信息为:

com.microsoft.azure.storage.StorageException: One of the request inputs is not valid.
错误栈指向AzureNativeFileSystemStore.rename操作,发生在任务提交阶段的文件重命名步骤。

用户代码示例:

val conf = new SparkConf()
val config = new SparkConf();
val spark = SparkSession.builder().appName("AzureConnector ").config(config).master("local[*]").getOrCreate()

try {
  spark.sparkContext.hadoopConfiguration.set("fs.azure", "org.apache.hadoop.fs.azure.NativeAzureFileSystem")

  spark.sparkContext.hadoopConfiguration.set("fs.wasbs.impl", "org.apache.hadoop.fs.azure.NativeAzureFileSystem")
  spark.sparkContext.hadoopConfiguration.set("fs.azure.account.key.**myaccount**.blob.core.windows.net",
    "**mykey**")

 
  val csvDf = spark.read.csv("wasbs://workspaces@myaccount.blob.core.windows.net/test/test.csv")
  csvDf.show()
  csvDf.coalesce(1).write.format("csv").mode("append").save("wasbs://workspaces@myaccount.blob.core.windows.net/test/output")

} catch {
  case e: Exception => {
    e.printStackTrace()
  }
}

解决方案

1. 校验存储密钥与权限

  • 确认存储账户密钥无复制错误(比如多空格、字符缺失),需完全匹配Azure门户中复制的内容。
  • 检查存储账户或目标容器的权限:确保当前身份拥有Storage Blob Data Contributor或更高权限,可通过Azure门户的IAM或容器访问控制配置。

2. 更换Hadoop输出提交器

默认的FileOutputCommitter在Azure Blob上执行重命名操作易出现兼容性问题,添加以下配置切换为Azure适配的提交器:

// 使用版本2的提交算法
spark.sparkContext.hadoopConfiguration.set("mapreduce.fileoutputcommitter.algorithm.version", "2")
// 启用Azure原生提交器
spark.sparkContext.hadoopConfiguration.set("fs.azure.committer.name", "native")

若使用Spark 3.x,也可指定专用提交类:

spark.conf.set("spark.sql.sources.commitProtocolClass", "org.apache.spark.sql.execution.datasources.azurebfs.AzureBlobStorageCommitProtocol")

3. 调整分区操作

coalesce(1)在本地模式下可能引发提交阶段异常,可尝试:

  • 移除coalesce(1),让Spark默认生成多文件写入,验证是否正常。
  • 若需单文件输出,改用repartition(1),强制重分区逻辑可规避部分提交问题。

4. 检查目标路径合法性

  • 确认目标容器workspaces存在,路径中无Azure禁止的特殊字符(如空格、非ASCII符号)。
  • 追加模式下,确保目标路径已有文件的CSV格式与当前写入的结构一致,避免格式冲突导致提交失败。

5. 升级Hadoop-Azure依赖

旧版本hadoop-azure库与Azure Blob API兼容性不足,建议升级到与Spark版本匹配的稳定版(如Spark 3.x搭配Hadoop 3.3.x及以上)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 18:42:41