web-dev-qa-db-ja.com

Spark 2.2.0 FileOutputCommitter

DirectFileOutputCommitterはSpark 2.2.0で使用できなくなりました。これは、S3への書き込みに非常に長い時間がかかることを意味します(3時間対2分)。FileOutputCommitterのバージョンをに設定することでこれを回避できます。 2 in spark-これを行うことでシェル、

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の動作が表示されます。

2つの質問、

1)spark-sqlでFileOutputCommitterバージョン2の動作を取得するにはどうすればよいですか?

2)spark 2.2.0)でDirectFileOutputCommitterを引き続き使用できる方法はありますか?[データが欠落する可能性がゼロ以外でも問題ありません]

関連商品:

Spark 1.6 DirectFileOutputCommitter

9
user3279189

私はこの問題に見舞われました。 Sparkは、競合状態の場合にデータが失われる可能性があるため、DirectFileOutputCommitterの使用を推奨していません。アルゴリズムバージョン2はあまり役に立ちません。

いくつかの利点をもたらしたスナップ圧縮の代わりに、gzipを使用してデータをs3に保存しようとしました。

ここでの本当の問題は、sparkがs3://<output_directory>/_temporary/0最初に、データを一時から出力にコピーします。このプロセスはs3ではかなり遅いです(通常6MBPS)。したがって、大量のデータを取得すると、かなりの速度低下が発生します。

別の方法は、最初にHDFSに書き込み、次にdistcp/s3distcpを使用してデータをs3にコピーすることです。

また、解決策を探すこともできます Netflix提供

私はそれを評価していません。

編集:

新しいspark2.4バージョンは、s3の書き込みが遅いという問題を解決しました。最新のEMRバージョン(5.24)でのhadoop 2.8を使用したspark2.4の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

13