最近,我们从“HDFS 上的 EMR”-->“S3 上的 EMR”(启用了一致视图的 EMRFS)迁移,我们意识到 Spark“SaveAsTable”(镶木地板格式)写入 S3 的速度比 HDFS 慢约 4 倍,但我们发现使用 DirectParquetOutputCommitter -[1] w/ Spark 1.6 的解决方法。
S3 缓慢的原因 - 我们必须支付所谓的 Parquet 税 - [2],其中默认输出提交者写入临时表并稍后重命名,其中 S3 中的重命名操作非常昂贵
此外,我们确实了解使用“DirectParquetOutputCommitter”的风险,即启用推测任务时可能会导致数据损坏。
现在,在 Spark 2.0 中,此类已被弃用,我们想知道我们有哪些选项,以便在升级到 Spark 2.0 时,我们不会承受约 4 倍慢的写入速度。任何想法/建议/建议将不胜感激。
我们可以想到的一种解决方法是 - 保存在 HDFS 上,然后通过 s3DistCp 将其复制到 S3(当我们的 Hive 元数据存储指向 S3 时,如何以合理的方式完成此操作,有什么想法吗?)
看起来 Netflix 已经修复了这个问题 -[3],知道他们计划何时开源吗?
Thanks.
[1] - https://github.com/apache/spark/blob/21d5ca128bf3afd5c2d4c7fcc56240e28443474f/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/DirectParquetOutputCommitter.scala https://github.com/apache/spark/blob/21d5ca128bf3afd5c2d4c7fcc56240e28443474f/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/DirectParquetOutputCommitter.scala
[2] -
https://www.appsflyer.com/blog/the-bleeding-edge-spark-parquet-and-s3/ https://www.appsflyer.com/blog/the-bleeding-edge-spark-parquet-and-s3/
[3] -
http://www.slideshare.net/AmazonWebServices/bdt303-running-spark-and-presto-on-the-netflix-big-data-platform http://www.slideshare.net/AmazonWebServices/bdt303-running-spark-and-presto-on-the-netflix-big-data-platform