Spark 2.2.0 FileOutputCommitter

问题描述 投票:6回答:1

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

hadoop apache-spark amazon-s3 apache-spark-sql amazon-emr
1个回答
8
投票

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

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

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

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

此外,你可以找一个解决方案Netflix provided

我没有评估过。

© www.soinside.com 2019 - 2024. All rights reserved.