【问题标题】:Spark 2.2.0 FileOutputCommitterSpark 2.2.0 FileOutputCommitter
【发布时间】:2018-02-25 22:55:53
【问题描述】:

DirectFileOutputCommitter 在 Spark 2.2.0 中不再可用。这意味着写入 S3 需要非常长的时间(3 小时对 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 

上面的命令似乎设置了 version=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】:

    我被这个问题击中了。 Spark 不鼓励使用 DirectFileOutputCommitter,因为它可能会在竞争情况下导致数据丢失。算法版本 2 没有多大帮助。

    我尝试使用 gzip 将数据保存在 s3 中,而不是使用 snappy 压缩,这带来了一些好处。

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

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

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

    我还没有评估过。

    编辑:

    新的spark2.4版本解决了s3写入慢的问题。我发现在最新的 EMR 版本(5.24)中 spark2.4 和 hadoop 2.8 的 s3 写入性能几乎与 HDFS 写入相当。

    查看文档

    1. https://aws.amazon.com/blogs/big-data/improve-apache-spark-write-performance-on-apache-parquet-formats-with-the-emrfs-s3-optimized-committer/

    2. https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-s3-performance.html

    【讨论】:

    • 我们可以使用 fs.s3a.buffer.dir = /tmp/s3a/ 属性将任务输出保存在 hdfs 中,并在整个任务完成后移动到 S3 目标文件夹?
    猜你喜欢
    • 2018-02-18
    • 2021-07-01
    • 2018-03-11
    • 2019-11-10
    • 2014-07-19
    • 2018-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多