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

Spark3.1.2读取S3时提示No FileSystem for scheme:S3a错误如何解决

Spark 3.1.2 访问S3a协议报错java.io.IOException: No FileSystem for scheme: S3a 解决方案

1 代码层面修复

  • 解除s3a实现类及相关认证配置的注释:你当前代码中所有Hadoop s3a相关配置均被注释,Spark无法识别s3a协议对应的文件系统实现,必须解除对应行注释
  • 修正路径协议大小写:Hadoop文件系统对协议头大小写敏感,将路径中S3a://修改为全小写s3a://
    修正后的完整代码示例:
import os
from pyspark.sql import SparkSession

spark = SparkSession.builder \
            .appName("s3reader") \
            .getOrCreate()

sc = spark.sparkContext

# 解除以下配置注释,填写你实际的认证信息和端点
sc._jsc.hadoopConfiguration().set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
sc._jsc.hadoopConfiguration().set("fs.s3a.access.key", "替换为你的实际访问密钥AK")
sc._jsc.hadoopConfiguration().set("fs.s3a.secret.key", "替换为你的实际秘密密钥SK")
sc._jsc.hadoopConfiguration().set("fs.s3a.endpoint","替换为你的实际S3端点地址")
sc._jsc.hadoopConfiguration().set("fs.s3a.path.style.access", "true")

# 协议头改为全小写s3a
df = spark.read.json("s3a://silver/testfolder/4a2426b2-856c-4e9b-b698-b3dcdca74f48")

print(df)

2 依赖兼容性修复

Spark 3.1.2默认适配Hadoop 3.2.x版本,你当前使用的hadoop-aws:2.7.4、aws-java-sdk:1.7.4版本过低,与Spark内置Hadoop版本不兼容,若完成第一步修改后仍报错,按以下步骤调整:

  • 先删除/usr/local/spark/jars目录下现有的旧版aws相关jar包
  • 替换为匹配的依赖版本:hadoop-aws:3.2.0、aws-java-sdk-bundle:1.11.375
  • 也可以直接在提交任务时通过--packages参数自动拉取适配的依赖,无需手动上传jar包,提交命令如下:
spark-submit --packages org.apache.hadoop:hadoop-aws:3.2.0,com.amazonaws:aws-java-sdk-bundle:1.11.375 /home/cloud/sparks3test.py

3 全局配置方案(可选)

如果需要所有Spark任务默认支持s3a协议,无需每次在代码中配置,可在Spark的core-site.xml文件中添加以下配置:

<configuration>
  <property>
    <name>fs.s3a.impl</name>
    <value>org.apache.hadoop.fs.s3a.S3AFileSystem</value>
  </property>
  <property>
    <name>fs.AbstractFileSystem.s3a.impl</name>
    <value>org.apache.hadoop.fs.s3a.S3A</value>
  </property>
  <!-- 可同时添加全局的AK、SK、端点配置 -->
  <property>
    <name>fs.s3a.access.key</name>
    <value>全局AK</value>
  </property>
  <property>
    <name>fs.s3a.secret.key</name>
    <value>全局SK</value>
  </property>
  <property>
    <name>fs.s3a.endpoint</name>
    <value>全局端点地址</value>
  </property>
  <property>
    <name>fs.s3a.path.style.access</name>
    <value>true</value>
  </property>
</configuration>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:09:01