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

Spark3+Yarn3+S3环境下启用Magic Committer未实现性能提升的问题求助

Spark3+Yarn3+S3环境下启用Magic Committer未实现性能提升的问题求助

各位技术大佬好,我现在碰到一个关于Spark+Yarn+S3环境中Magic Committer的问题,想请大家帮忙分析下为啥没达到预期的性能提升效果。

我想要达成的目标

我希望给运行在Yarn(Hadoop 3.3.1)集群上的Spark 3.3.0应用启用S3A Magic Committer,以此优化S3数据写入时的性能。目前我的Spark应用需要写入约21GB的数据,对应的Spark阶段包含30个任务。

我的环境配置

  • 有一台部署了Spark客户端的服务器,通过**客户端模式(client-mode)**提交PySpark应用到Yarn集群。

已经尝试的操作

我通过PySpark的Spark-conf设置了以下配置来启用Magic Committer:

"spark.sql.sources.commitProtocolClass": "org.apache.spark.internal.io.cloud.PathOutputCommitProtocol"
"spark.sql.parquet.output.committer.class": "org.apache.hadoop.mapreduce.lib.output.BindingPathOutputCommitter"
"spark.hadoop.mapreduce.outputcommitter.factory.scheme.s3a": "org.apache.hadoop.fs.s3a.commit.S3ACommitterFactory"
"spark.hadoop.fs.s3a.committer.name": "magic"
"spark.hadoop.fs.s3a.committer.magic.enabled": "true"

另外,我已经将spark-hadoop-cloud jar包放到了所有NodeManager节点以及Spark客户端服务器的Spark-Home/jars/目录下。

当前观察到的配置生效迹象

从以下现象来看,我认为Magic Committer的配置已经正确生效:

  • 任务运行期间,执行aws s3 ls <写入路径>可以看到PRE __magic/目录;
  • 日志中不再出现这条警告:WARN AbstractS3ACommitterFactory: Using standard FileOutputCommitter to commit work. This is slow and potentially unsafe.;
  • 写入完成后生成的_SUCCESS文件包含JSON内容,其中明确有"committer" : "magic"这个键值对。

预期与实际的差距

我在不少技术资料里看到,Magic Committer能带来相当显著的性能提升,比如有的案例提到可以减少57%-77%的写入耗时。原本我预期启用这些配置后,负责Parquet写入的阶段耗时能从原来的39秒大幅降低,但实际运行下来,耗时并没有明显变化,这和我的预期不符。

其他相关细节

  • 当我尝试把spark.sql.sources.commitProtocolClass设置为com.hortonworks.spark.cloud.commit.PathOutputCommitProtocol时,应用直接报错:java.lang.ClassNotFoundException: com.hortonworks.spark.cloud.commit.PathOutputCommitProtocol;
  • 考虑到S3现在已经提供强一致性,我暂时还没启用S3Guard。

备注:内容来源于stack exchange,提问作者akki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 07:08:02