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
相关产品推荐
相关产品推荐

