Spark 2.2.0 FileOutputCommitter

时间:2017-09-17 07:37:09

标签: hadoop apache-spark amazon-s3 apache-spark-sql amazon-emr

Spark 2.2.0中不再提供DirectFileOutputCommitter。这意味着写入S3需要花费很长时间(3小时vs 2分钟)。通过这样做,我可以通过在Spark-shell中将FileOutputCommitter版本设置为2来解决这个问题,

spark-shell --conf spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version=2 

同样不适用于spark-sql

spark-sql --conf spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version=2 

上面的命令似乎是设置版本= 2,但是当执行查询时,它仍然显示版本1行为。

两个问题,

1)如何使用spark-sql获取FileOutputCommitter版本2行为?

2)我有没有办法在spark 2.2.0中使用DirectFileOutputCommitter? [我很好,数据丢失的可能性非零]

相关项目:

Spark 1.6 DirectFileOutputCommitter

1 个答案:

答案 0 :(得分:8)

我受到了这个问题的打击。 Spark不鼓励使用DirectFileOutputCommitter,因为它可能会导致数据在比赛情况下丢失。算法版本2没有太大帮助。

我试图使用gzip来保存s3中的数据而不是snappy压缩,这给了一些好处。

这里真正的问题是首先在s3://<output_directory>/_temporary/0中写入spark然后将数据从临时复制到输出。这个过程在s3中相当缓慢,(通常为6MBPS)因此,如果你获得大量数据,你将会大幅减速。

另一种方法是首先写入HDFS,然后使用distcp / s3distcp将数据复制到s3。

此外,您可以寻找解决方案Netflix provided

我没有评估过。