hadoop - 星火 2.2.0 FileOutputCommitter

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

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

最佳答案

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

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

这里真正的问题是 spark 在 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

关于hadoop - 星火 2.2.0 FileOutputCommitter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46261754/

相关文章:

Python:使用 `import csv` 从 S3 存储桶读取 CSV

networking - Hadoop 自定义节点上的输入分布

hadoop - 从rdbms执行sqoop导入后,如何在 hive 中检查数据是否正确导入

java - 在 Apache Spark SQL 中对多行进行操作

RserveException : eval failed when running R on Databricks

amazon-web-services - Spark 写入 S3 V4 SignatureDoesNotMatch 错误

redirect - Amazon S3 重定向和 Cloudfront

amazon-web-services - AWS s3添加用户定义的元数据而不存储 `x-amz-meta-`

hadoop - 删除 DataNode 目录时的 HDFS 行为

hadoop - 选择Hadoop的传统数据库的数据量大小如何?