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

    次の例は、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-defaults 設定分類を使用して、 spark.sql.execution.datasources.SQLEmrOptimizedCommitProtocol.leverageMagicCommitProtocolプロパティを false に設定します。詳細については、「アプリケーションの設定」を参照してください。

MagicCommitProtocol に関する考慮事項

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

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

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