Spark 2.2.0 FileOutputCommitter

use*_*189 6 hadoop amazon-s3 amazon-emr apache-spark apache-spark-sql

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

spark-shell --conf spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version=2 
Run Code Online (Sandbox Code Playgroud)

同样不适用于spark-sql

spark-sql --conf spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version=2 
Run Code Online (Sandbox Code Playgroud)

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

两个问题,

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

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

相关物品:

Spark 1.6 DirectFileOutputCommitter

Avi*_*rya 13

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

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

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

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

此外,您可以寻找Netflix提供的解决方案.

我没有评估过.