Spark独立集群使用AWS S3 Shuffle Service时块获取失败求助
Spark独立集群使用AWS S3 Shuffle Service时Shuffle块获取失败排查
从错误日志来看,配置了S3 Shuffle Service后,执行器仍在尝试读取本地/tmp目录下的Shuffle索引文件,说明S3 Shuffle插件未正常生效,以下是针对性排查步骤:
1. 确认依赖包全节点加载
AWS S3 Shuffle Service需要特定依赖支持,必须确保集群所有Master、Worker节点都包含兼容的jar包:
- 核心依赖:
spark-hadoop-cloud_3.3.0-*.jar(对应Spark 3.3.0版本)、aws-java-sdk-bundle_*.jar - 部署方式:
- 将jar包放到所有节点的
$SPARK_HOME/jars目录下 - 或在
spark-submit中通过--jars参数显式指定依赖路径,确保所有执行器能拉取到这些依赖
- 将jar包放到所有节点的
2. 补全Shuffle插件配置项
仅配置spark.shuffle.sort.io.plugin.class和spark.shuffle.storage.path不足以让插件正常工作,需补充以下关键配置:
# 基础配置(已添加) spark.shuffle.sort.io.plugin.class=com.amazonaws.spark.shuffle.io.cloud.ChopperPlugin spark.shuffle.storage.path=s3a://<bucket>/shuffle.tmp # 补充配置 spark.hadoop.fs.s3a.access.key=<你的访问密钥> # 或通过IAM角色赋予节点S3权限 spark.hadoop.fs.s3a.secret.key=<你的密钥密码> spark.shuffle.io.preferDirectBufs=false # 部分版本需关闭直接缓冲区以适配插件
注意:确认S3桶名、路径拼写正确,执行器节点需具备该路径的s3:GetObject/s3:PutObject/s3:ListBucket权限。
3. 验证插件初始化状态
查看执行器启动日志,搜索ChopperPlugin相关日志:
- 若未找到插件初始化日志,说明依赖缺失或配置未生效
- 若存在
Failed to load shuffle IO plugin报错,直接定位到依赖版本不兼容或配置错误
4. 确保集群配置一致性
- 所有Worker节点的
spark-defaults.conf需包含相同的Shuffle插件配置,避免仅在spark-submit中指定导致配置未传递到执行器 - 检查Worker节点的
SPARK_CLASSPATH环境变量,确认已包含AWS相关依赖路径
5. 排查本地临时目录问题
- 若插件部分生效,但本地临时文件被提前清理,也会触发该错误。检查
spark.local.dir配置,以及系统级临时文件清理机制(如tmpwatch)是否会删除Spark临时文件 - 可以临时修改
spark.local.dir到非自动清理的目录,验证问题是否消失
完整spark-submit示例
spark-submit \ --class com.your.job.ClassName \ --master spark://<master-ip>:7077 \ --jars /opt/spark/jars/spark-hadoop-cloud_3.3.0-1.0.jar,/opt/spark/jars/aws-java-sdk-bundle-1.12.367.jar \ --conf spark.shuffle.sort.io.plugin.class=com.amazonaws.spark.shuffle.io.cloud.ChopperPlugin \ --conf spark.shuffle.storage.path=s3a://<bucket>/shuffle.tmp \ --conf spark.hadoop.fs.s3a.access.key=<AKIAXXX> \ --conf spark.hadoop.fs.s3a.secret.key=<XXX> \ --conf spark.shuffle.io.preferDirectBufs=false \ your-job.jar
内容的提问来源于stack exchange,提问作者ffff
相关产品推荐
相关产品推荐

