EMR Spark MagicCommitProtocol - Amazon EMR

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

EMR Spark MagicCommitProtocol

EMR 6.15.0 以降、S3A ファイルシステムを利用することにより、MagicCommitProtocol は Spark のデフォルトの FileCommitProtocol になります。

MagicCommitProtocol

MagicCommitProtocol は、FileCommitProtocol の代替実装であり、S3A ファイルシステムを使用する時に EMR Spark を使用して Amazon S3 にファイルを書き込むように最適化されています。このプロトコルは、ジョブおよびタスクコミットフェーズ中の Amazon S3 での名前変更操作を回避することで、アプリケーションのパフォーマンスを向上させます。

MagicCommitProtocol は、S3A ファイルシステムが使用されているときに Amazon Elastic Map Reduce (EMR) で実行されている Spark で使用されるデフォルトの FileCommitProtocol 実装です。MagicCommitProtocol は、内部的に MagicV2Committer を使用して Amazon S3 へのファイル書き込みを実行します。

静的挿入オペレーションの場合、MagicCommitProtocol はタスクコミットフェーズ中にジョブの出力場所にファイルを書き込みます。対照的に、動的挿入上書きオペレーションの場合、タスク試行によって書き込まれたファイルは、ジョブのコミット時にジョブの出力場所にのみ表示されます。これは、コミットメタデータをタスクコミット呼び出しで Spark ドライバーにエクスポートすることで実現されます。

MagicCommitProtocol の有効化

MagicCommitProtocol は、S3A ファイルシステムを使用する時に Amazon Elastic Map Reduce (EMR) で実行される Spark に対してデフォルトで有効になっています。

S3A ファイルシステムを使用するには、以下のいずれかを実行します:

  1. テーブル、パーティション、またはディレクトリを定義するときは、ファイルスキームを s3a:// として使用します。

  2. core-site.xml で設定 fs.s3.impl=org.apache.hadoop.fs.s3a.S3AFileSystem を行います。

MagicCommitProtocol の無効化

  1. spark.sql.execution.datasources.SQLEmrOptimizedCommitProtocol.leverageMagicCommitProtocol は、SparkConf でハードコーディングするか、Spark シェルまたは spark-submit および spark-sql ツールで --conf パラメータとして渡すか、conf/spark-defaults.conf で false に設定できます。詳細については、Apache Spark ドキュメントの「Spark Configuration」を参照してください。

    次の例は、spark-sql コマンドの実行中に MagicCommitProtocol を無効にする方法を示しています。

    spark-sql \ --conf spark.sql.execution.datasources.SQLEmrOptimizedCommitProtocol.leverageMagicCommitProtocol=false \ -e "INSERT OVERWRITE TABLE target_table SELECT * FROM source_table;"
  2. spark.sql.execution.datasources.SQLEmrOptimizedCommitProtocol.leverageMagicCommitProtocol プロパティを false に設定するには、spark-defaults 設定分類を使用します。詳細については、「アプリケーションの設定」を参照してください。

MagicCommitProtocol に関する考慮事項

  • 静的パーティション挿入の場合、Spark エグゼキュターで、MagicCommitProtocol 向けに最適化されたコミットプロトコルは、タスクがコミットされるか中止されるまで、タスクの試行によって書き込まれた各ファイルのために少量のメモリを消費します。ほとんどのジョブで消費されるメモリの量は無視できる程度です。Spark ドライバーに追加のメモリ要件はありません

  • 動的パーティション挿入の場合、Spark ドライバーでは、ジョブがコミットまたは中止されるまで、MagicCommitProtocol はコミットされた各ファイルのメタデータ情報を保存するメモリを必要とします。ほとんどのジョブでは、Spark ドライバーのデフォルトのメモリ設定はごくわずかです。

    多数のファイルを書き込む長時間のタスクを含むジョブの場合、コミットプロトコルが消費するメモリが多くなり、Spark、特に Spark エグゼキュターに割り当てられたメモリの調整が必要になることがあります。Spark ドライバーの spark.driver.memory プロパティと Spark エグゼキュターの spark.executor.memory プロパティを使用してメモリを調整できます。ガイドラインとして、100,000 個のファイルを書き込む 1 つのタスクでは、一般的に 200 MB のメモリを追加する必要があります。詳細については、Apache Spark Configuration ドキュメントの「Application Properties」を参照してください。