翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
EMR Spark MagicCommitProtocol
EMR 6.15.0 以降、S3A ファイルシステムを利用すると、MagicCommitProtocol は Spark のデフォルトの FileCommitProtocol になります。
MagicCommitProtocol
MagicCommitProtocol は FileCommitProtocol
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 ファイルシステムを使用するには、次のいずれかを実行します。
-
テーブル、パーティション、またはディレクトリを定義する
s3a://
ときは、 ファイルスキームを として使用します。 -
core-site.xml
fs.s3.impl=org.apache.hadoop.fs.s3a.S3AFileSystem
で設定を行います。
MagicCommitProtocol の無効化
-
を 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;"
-
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」を参照してください。