Apache spark emr-5.20.0 Spark 2.4.0将拼花地板写入s3需要太多时间

Apache spark emr-5.20.0 Spark 2.4.0将拼花地板写入s3需要太多时间,apache-spark,parquet,Apache Spark,Parquet,我正在使用: emr-5.20.0 Hadoop 2.8.5 Spark 2.4.0 我的一项Spark工作将拼花地板数据写入s3,这似乎需要20-30分钟完成,90%的处理时间,但最后5-10%需要2小时才能完成。我读过很多论坛,知道EMR使用的是优化输出提交器,但它仍然需要花费太多的时间。我正在尝试配置自定义提交程序,但作业始终使用EMROPTIMIZEDSPARKSQLPARQUETOTOUTPUTCOMMITER,如何禁用此功能并添加自定义提交程序。。。。以下是日志: 19/01/1

我正在使用:

  • emr-5.20.0
  • Hadoop 2.8.5
  • Spark 2.4.0
我的一项Spark工作将拼花地板数据写入s3,这似乎需要20-30分钟完成,90%的处理时间,但最后5-10%需要2小时才能完成。我读过很多论坛,知道EMR使用的是优化输出提交器,但它仍然需要花费太多的时间。我正在尝试配置自定义提交程序,但作业始终使用EMROPTIMIZEDSPARKSQLPARQUETOTOUTPUTCOMMITER,如何禁用此功能并添加自定义提交程序。。。。以下是日志:

19/01/12 23:17:11 INFO FileOutputCommitter: File Output Committer Algorithm version is 2
19/01/12 23:17:11 INFO FileOutputCommitter: FileOutputCommitter skip cleanup _temporary folders under output directory:false, ignore cleanup failures: true
19/01/12 23:17:11 INFO SQLHadoopMapReduceCommitProtocol: Using user defined output committer class com.amazon.emr.committer.EmrOptimizedSparkSqlParquetOutputCommitter
19/01/12 23:17:11 INFO EmrOptimizedParquetOutputCommitter: EMR Optimized Committer: ENABLED
19/01/12 23:17:11 INFO EmrOptimizedParquetOutputCommitter: Using output committer class org.apache.hadoop.mapreduce.lib.output.FileSystemOptimizedCommitter
19/01/12 23:17:11 INFO FileOutputCommitter: File Output Committer Algorithm version is 2
19/01/12 23:17:11 INFO FileOutputCommitter: FileOutputCommitter skip cleanup _temporary folders under output directory:false, ignore cleanup failures: true
19/01/12 23:17:11 INFO FileOutputCommitter: File Output Committer Algorithm version is 2
19/01/12 23:17:11 INFO FileOutputCommitter: FileOutputCommitter skip cleanup _temporary folders under output directory:false, ignore cleanup failures: true
19/01/12 23:17:11 INFO SQLHadoopMapReduceCommitProtocol: Using output committer class com.amazon.emr.committer.EmrOptimizedSparkSqlParquetOutputCommitter
19/01/12 23:17:11 INFO FileSystemOptimizedCommitter: Nothing to setup as successful task attempt outputs are written directly.```

How do i disbale EMR to not use its own optimized EmrOptimizedSparkSqlParquetOutputCommitter

--conf spark.hadoop.mapred.output.committer.class = ai.peritus.training.preprocess.PeritusS3PartitionedOutputFormat 
--conf spark.hadoop.mapreduce.use.directfileoutputcommitter=false 
--conf spark.hadoop.spark.sql.parquet.output.committer.class= com.netflix.bdp.s3.S3PartitionedOutputCommitter 
--conf mapreduce.fileoutputcommitter.algorithm.version=1



我来自EMR团队,所以我对这个功能有点偏见,尽管有一些证据表明它对其他客户很有效。例如,请参见

不过,我会先回答你的问题。为了使用自己的committer类,您需要设置
spark.sql.parquet.output.committer.class
属性。在上面的示例中,您错误地使用了
spark.hadoop.spark.sql.parquet.output.committer.class

也就是说,我认为我们应该首先确认您的应用程序甚至在第一时间使用了EMRFS S3优化提交程序。如果您在作业结束时遇到速度缓慢的问题,则可能是优化的提交程序没有实际使用,或者是作业中速度缓慢的其他原因,例如数据倾斜导致任务运行时间过长


在某些情况下,即使启用了EMRFS S3优化提交器,也不会实际使用它。了解有关应用程序的更多信息会有所帮助,例如一些示例代码。此外,如果您能够提供一个示例群集id(j-ABC123),它将帮助EMR的人员调试您的问题。

此外,有关EMRFS S3优化提交程序的更多信息,请参阅。我们实际上会在成功或失败完成后杀死这些群集,但我已经确定使用了EMRFS S3优化提交程序,并将其输出到日志中:@JonathanKelly,是否有任何方法可以检查是否使用了EMRFS S3优化提交程序?@JonathanKelly您能在我还尝试禁用emropimizedParksqlParquetoutputCommitter并添加自定义提交程序时提供帮助吗