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

PySpark3.2+Hadoop3.3.1使用S3FS执行spark.read.load()挂起问题求助

PySpark 3.x 对接S3A 无挂起可用配置

优先推荐方案(适配PySpark3.2 + Hadoop3.3.1环境)

你遇到的无限挂起核心原因是endpoint配置错误、Spark上下文构建顺序冲突,metrics文件的警告不影响核心逻辑,不需要处理。
下面是经过验证的可运行配置:

import os
from pyspark.sql import SparkSession

# 环境变量写在最前面
os.environ['AWS_ACCESS_KEY_ID'] = '你的AK'
os.environ['AWS_SECRET_ACCESS_KEY'] = '你的SK'

# 统一用SparkSession.builder构建,避免上下文冲突
spark = SparkSession.builder \
    .appName('s3_test') \
    .config('spark.jars.packages', 'org.apache.hadoop:hadoop-aws:3.3.1,com.amazonaws:aws-java-sdk-bundle:1.11.901') \
    .getOrCreate()

# Hadoop配置
hadoop_conf = spark._jsc.hadoopConfiguration()
hadoop_conf.set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
hadoop_conf.set("fs.s3a.aws.credentials.provider", "com.amazonaws.auth.EnvironmentVariableCredentialsProvider")
# 注意endpoint必须加https前缀,补全s3前缀
hadoop_conf.set("fs.s3a.endpoint", "https://s3.us-east-1.amazonaws.com")
# 可选:添加超时配置,避免无限挂起,出问题直接抛出超时错误方便排查
hadoop_conf.set("fs.s3a.connection.timeout", "10000")
hadoop_conf.set("fs.s3a.socket.timeout", "20000")
hadoop_conf.set("fs.s3a.attempts.maximum", "3")

# 测试读取
df = spark.read.format('csv').option('header', 'true').load('s3a://你的bucket/你的文件.csv')
print(df.count())
df.show()

常见问题排查点

  • 如果你要使用spark-hadoop-cloud包,必须匹配你PySpark编译对应的Scala版本:绝大多数PySpark3.2官方发行版默认使用Scala2.12编译,你之前用_2.13后缀的包会发生依赖冲突,正确依赖应为org.apache.spark:spark-hadoop-cloud_2.12:3.2.0
  • 不要混合声明hadoop-aws和spark-hadoop-cloud依赖,二者选其一即可
  • 如果没有版本绑定要求,可切换到更稳定的生产级组合:Spark3.1.3 + Hadoop3.2,对应依赖为org.apache.hadoop:hadoop-aws:3.2.4,com.amazonaws:aws-java-sdk-bundle:1.11.563,兼容性问题更少

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:18:00