2016-09-22 6 views
11

Недавно мы перешли из «EMR на HDFS» -> «EMR на S3» (EMRFS с включенным согласованным просмотром), и мы поняли, что запись Spark «SaveAsTable» (формат паркета) на S3 была ~ 4 раза медленнее по сравнению с HDFS, но мы обнаружили обходной путь использования DirectParquetOutputCommitter - [1] w/Spark 1.6.Spark 2.0 обесценивает «DirectParquetOutputCommitter», как жить без него?

Причина S3 медлительности - Мы должны были заплатить так называемый Паркетный руль [2], где выход по умолчанию коммиттер пишет во временную таблицу и переименовывает его позже, когда операция переименования в S3 является очень дорогой

Также мы понимаем риск использования «DirectParquetOutputCommitter», который позволяет предотвратить повреждение данных с помощью спекулятивных задач.

В настоящее время w/Spark 2.0 этот класс устарел, и нам интересно, какие параметры у нас есть на столе, чтобы мы не получали более медленную запись ~ 4x при обновлении до Spark 2.0. Любые мысли/предложения/рекомендации будут высоко оценены.

Один из способов, что мы можем думать о том, - Сохранить на HDFS, а затем скопировать его в S3 через s3DistCp (любые мысли о том, как это может быть сделано в здравом, как наши Hive метаданных магазина указывает на S3?)

Также похоже, что NetFlix исправил это - [3], любую идею о том, когда они планируют открыть исходный код?

Спасибо.

[1] - 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/

[3] - https://www.youtube.com/watch?v=85sew9OFaYc&feature=youtu.be&t=8m39s http://www.slideshare.net/AmazonWebServices/bdt303-running-spark-and-presto-on-the-netflix-big-data-platform

+0

Я только что столкнулся с той же проблемой и вернулся к emr 4.8. Curios, чтобы увидеть ответы здесь. Более подробную информацию можно найти здесь: https://issues.apache.org/jira/browse/SPARK-10063 – Niros

ответ

11

Вы можете использовать: sparkContext.hadoopConfiguration.set("mapreduce.fileoutputcommitter.algorithm.version", "2")

, поскольку вы на ЭМИ просто использовать s3 (нет необходимости в s3a)

Мы используем Спарк 2.0 и записи паркета до S3 довольно быстро (примерно так же быстро, как HDFS)

, если вы хотите узнать больше проверить этот Jira билет SPARK-10063

0

Я думаю, что S3 коммиттер от Netflix является уже открыты по адресу: https://github.com/rdblue/s3committer.

+0

На сегодняшний день он не поддерживает записи паркетных файлов: http: // apache-spark-developers-list. 1001551.n3.nabble.com/Output-Committers-for-S3-td21033.html – Cristian