おそらく3と4の間のコミットプロセスです。Hadoop MR および Spark コミッターは、名前変更が O(1) アトミック操作であると想定し、作業のアトミック コミットを行うためにそれに依存します。S3 では、ディレクトリ内の複数のファイルが関係する場合、名前の変更は O(データ) であり、非アトミックです。CPU 負荷が 0 であることは問題です。クライアントは S3 からの応答を待っているだけで、S3 は 6 ~ 10 MB/秒で内部的に COPY を実行しています。
HADOOP-13345 では、S3 で 0-rename コミットを行う作業が進行中です。今のところ、Databricks の Direct Committer という、有名だが興味深い方法で失敗するものを探すことができます。
もう 1 つ: コミットに「アルゴリズム 2」を使用していることを確認してください。アルゴリズム 1 は、最終的なジョブ マスター コミットでより多くの名前変更を行うためです。Hadoop 2.7 での ORC/Parquet パフォーマンスの完全な推奨設定は次のとおりです (use s3a: urls とともに):
spark.sql.parquet.filterPushdown true
spark.sql.parquet.mergeSchema false
spark.hadoop.parquet.enable.summary-metadata false
spark.sql.orc.filterPushdown true
spark.sql.orc.splits.include.file.footer true
spark.sql.orc.cache.stripe.details.size 10000
spark.sql.hive.metastorePartitionPruning true
spark.speculation false
spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version 2
spark.hadoop.mapreduce.fileoutputcommitter.cleanup.skipped true