无法让 Spark 将魔法输出提交器用于带有 EMR 的 s3

Can't get Spark to use the magic output committer for s3 with EMR

我正在尝试使用神奇的输出提交器,但无论我做什么,我都会得到默认的输出提交器。

INFO FileOutputCommitter: File Output Committer Algorithm version is 10
22/03/08 01:13:06 ERROR Application: Only 1 or 2 algorithm version is supported

这就是我根据 Hadoop docs 知道我正在使用它的方式。 我究竟做错了什么? 这是我的相关 conf(使用 SparkConf()),我尝试了很多其他的。

  .set("spark.hadoop.fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
  .set("spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version", "10")
  .set("spark.hadoop.fs.s3a.committer.magic.enabled", "true")
  .set("spark.hadoop.mapreduce.outputcommitter.factory.scheme.s3a", "org.apache.hadoop.fs.s3a.commit.S3ACommitterFactory")
  .set("fs.s3a.committer.name", "magic")
  .set("spark.sql.sources.commitProtocolClass", "org.apache.spark.internal.io.cloud.PathOutputCommitProtocol")
  .set("spark.sql.parquet.output.committer.class", "org.apache.spark.internal.io.cloud.BindingParquetOutputCommitter")

我没有任何其他相关配置。不在代码或 conf 文件(Hadoop 或 Spark)中,也许我应该?我写的路径以 s3:// 开头。 使用 Hadoop 3.2.1、Spark 3.0.0 和 EMR 6.1.1

所以在大量阅读+stevel 评论之后,我找到了我需要的东西。 我正在使用优化的输出提交器,它是 built-in EMR,默认情况下使用。起初我没有使用它的原因是 AWS 优化的提交器只有在它可以的时候才会被激活。在 EMR 6.4.0 之前,它仅在某些条件下有效,但从 6.4.0 开始,它适用于每种写入类型 txt csv parquet 以及 rdd 数据报和数据集。所以我只需要更新到 EMR 6.4.0。

执行时间缩短了 50-60%。

优化的提交者requeirments