emr-5.20.0 Spark 2.4.0将镶木地板写入s3需要太多时间

时间:2019-01-12 23:57:22

标签: apache-spark parquet

我正在使用:

  • emr-5.20.0
  • Hadoop 2.8.5
  • 火花2.4.0

我的一个Spark作业将镶木地板数据写入s3,这似乎在20-30分钟内完成了90%的处理,但最后5-10%需要2小时才能完成。我已经阅读了很多论坛,并且知道EMR正在使用优化的输出提交程序,但是它仍然花费太多时间。我正在尝试配置自定义提交程序,但是该作业始终使用EmrOptimizedSparkSqlParquetOutputCommitter,如何禁用此功能并添加自定义提交程序。...以下是日志:

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


1 个答案:

答案 0 :(得分:0)

我来自EMR团队,因此我对此功能有些偏见,尽管有证据表明该功能对其他客户而言效果很好。例如,请参见https://stackoverflow.com/a/54350777/2205987

但是,我将首先回答您提出的问题。为了使用自己的提交者类,您需要设置spark.sql.parquet.output.committer.class属性。在上面的示例中,您错误地使用了spark.hadoop.spark.sql.parquet.output.committer.class

也就是说,我认为我们首先应该确认您的应用程序甚至首先使用了EMRFS S3优化的提交者。如果您在工作结束时遇到速度缓慢的情况,则可能是实际上并未使用优化的提交程序,或者有其他一些导致速度缓慢的原因,例如数据偏斜导致任务运行时间很长。 / p>

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