翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Spark の設定
Spark on Amazon は、設定分類EMR
Amazon での Spark の設定分類EMRには、以下が含まれます。
-
spark
-maximizeResourceAllocation
プロパティを true または false に設定します。true の場合、Amazon はクラスターハードウェア設定に基づいてspark-defaults
プロパティEMRを自動的に設定します。詳細については、「maximizeResourceAllocation の使用」を参照してください。 -
spark-defaults
-spark-defaults.conf
ファイルに値を設定します。詳細については、Spark ドキュメントの「Spark Configuration」を参照してください。 -
spark-env
-spark-env.sh
ファイルに値を設定します。詳細については、Spark ドキュメントの「Environment Variables」を参照してください。 -
spark-hive-site
- Spark のhive-site.xml
に値を設定します。 -
spark-log4j
– (Amazon EMRリリース 6.7.x 以前)log4j.properties
ファイルの値を設定します。詳細については Github の log4j.properties.templateファイルをご覧ください。 -
spark-log4j2
– (Amazon EMRリリース 6.8.0 以降)log4j2.properties
ファイルの値を設定します。詳細については、Github の log4j2.properties.templateファイルをご覧ください。 -
spark-metrics
-metrics.properties
ファイルに値を設定します。設定と詳細については Github の metrics.properties.templateファイルと Spark ドキュメントの Metrics をご覧ください。
注記
別のプラットフォームEMRから Spark ワークロードを Amazon に移行する場合は、カスタム設定を追加するAmazon によって設定された Spark のデフォルト EMR 前に を使用してワークロードをテストすることをお勧めします。ほとんどのお客様は、デフォルト設定でパフォーマンスが向上されます。
トピック
Amazon によって設定された Spark のデフォルト EMR
次の表は、Amazon spark-defaults
がアプリケーションに影響する のデフォルト値EMRを設定する方法を示しています。
設定 | 説明 | デフォルト値 |
---|---|---|
spark.executor.memory |
エグゼキュタープロセスごとに使用するメモリ量。例: |
この設定は、クラスター内のコアインスタンスタイプとタスクインスタンスタイプによって決まります。 |
spark.executor.cores |
各エグゼキュターに使用するコアの数。 |
この設定は、クラスター内のコアインスタンスタイプとタスクインスタンスタイプによって決まります。 |
spark.dynamicAllocation.enabled |
true の場合、動的なリソース割り当てを使用して、ワークロードによって、アプリケーションで登録するエグゼキュターの数を調整します。 |
注記Spark シャッフルサービスは Amazon EMR によって自動的に設定されます。 |
spark.sql.hive.advancedPartitionPredicatePushdown.enabled |
true の場合、Hive メタストアへの高度なパーティション述語プッシュダウンが有効になります。 |
true |
spark.sql.hive.stringLikePartitionPredicatePushdown.enabled |
注記Glue は |
true |
Amazon 6.1.0 EMR での Spark ガベージコレクションの設定
spark.driver.extraJavaOptions
と でカスタムガベージコレクション設定を設定するとspark.executor.extraJavaOptions
、Amazon 6.1.0 EMR とガベージコレクション設定が競合するため、ドライバーまたはエグゼキュターの起動が Amazon 6.1 EMR で失敗します。Amazon EMR6.1.0 の場合、デフォルトのガベージコレクション設定は spark.driver.defaultJavaOptions
および を通じて設定されますspark.executor.defaultJavaOptions
。この設定は Amazon 6.1.0 EMR にのみ適用されます。JVM ログ記録 (-verbose:class
) を設定するためのオプションなど、ガベージコレクションに関連しないオプションは、引き続き を通じて設定できますextraJavaOptions
。詳細については、「Spark application properties
maximizeResourceAllocation
の使用
クラスター内の各ノードでリソースを最大限に使用できるようにエグゼキューターを設定するには、spark
設定分類で maximizeResourceAllocation
を true
に設定します。maximizeResourceAllocation
は Amazon EMR に固有です。を有効にするとmaximizeResourceAllocation
、Amazon はコアインスタンスグループのインスタンスでエグゼキュターに使用できる最大コンピューティングリソースとメモリリソースをEMR計算します。次に、計算された最大値に基づいて対応する spark-defaults
設定を設定します。
Amazon は、コアインスタンスフリートのインスタンスタイプに基づいて、エグゼキュターで使用できる最大コンピューティングリソースとメモリリソースをEMR計算します。各インスタンスフリートはフリート内で異なるインスタンスタイプとサイズを持つことができるため、Amazon がEMR使用するエグゼキュター設定はクラスターにとって最適ではない可能性があるため、最大リソース割り当てを使用するときはデフォルト設定を使用することはお勧めしません。インスタンスフリートクラスターのカスタム設定を設定します。
注記
などの他の分散アプリケーションを使用するクラスターでは、 maximizeResourceAllocation
オプションを使用しないでくださいHBase。Amazon EMRは分散アプリケーションにカスタムYARN設定を使用します。これにより、Spark アプリケーションと競合maximizeResourceAllocation
して失敗する可能性があります。
以下に、maximizeResourceAllocation
が true
に設定された Spark 設定分類の例を示します。
[ { "Classification": "spark", "Properties": { "maximizeResourceAllocation": "true" } } ]
設定 | 説明 | 値 |
---|---|---|
spark.default.parallelism | 結合などの変換によってRDDs返される のパーティションのデフォルト数。ユーザーが設定しない場合 reduceByKeyに並列化します。 |
YARN コンテナで使用できるCPUコアの数は 2Xです。 |
spark.driver.memory | ドライバープロセスに使用するメモリ量。 SparkContext が初期化されている など。 (1g、2g など)。 |
設定は、クラスター内のスレーブインスタンスタイプに基づいて定義されます。ただし、Spark ドライバーアプリケーションは、プライマリインスタンスまたはコアインスタンスのいずれか (クライアントモードYARNとクラスターモード) で実行される可能性があるため、この 2 つのインスタンスグループのインスタンスタイプのうち小さい方に基づいて設定されます。 |
spark.executor.memory | エグゼキュターのプロセスごとに使用するメモリの量 (例: 1g、2g) |
設定は、クラスター内のコアおよびタスクインスタンスタイプに基づいて行われます。 |
spark.executor.cores | 各エグゼキュターに使用するコアの数。 | 設定は、クラスター内のコアおよびタスクインスタンスタイプに基づいて行われます。 |
spark.executor.instances | エグゼキュターの数。 |
設定は、クラスター内のコアおよびタスクインスタンスタイプに基づいて行われます。同時に |
ノード停止の動作設定
Amazon EMRリリース 5.9.0 以降では、Spark on Amazon には、手動サイズ変更または自動スケーリングポリシーリクエストにより、Spark がノードの終了を正常に処理するのに役立つ一連の機能EMRが含まれています。Amazon は、YARN廃止メカニズムの上に構築された Spark に拒否リストメカニズムEMRを実装します。このメカニズムにより、停止中のノードで新しいタスクがスケジュールされないようにし、同時に、既に実行中のタスクを完了するようにします。さらに、ノードの終了時にシャッフルブロックが失われた場合に、Spark のジョブを迅速に回復するための機能があります。再計算プロセスはすぐに実行され、より少ないステージの再試行でより迅速に再計算を行うように最適化されます。シャッフルブロックが見つからないことにより発生するフェッチのエラーによるジョブの失敗を避けることができます。
重要
Amazon EMRリリース 5.11.0 では、スポットインスタンスを使用する際の Spark の耐障害性を向上させるために、 spark.decommissioning.timeout.threshold
設定が追加されました。これまでのリリースでは、ノードがスポットインスタンスを使用していて、インスタンスが入札価格のために終了した場合、Spark は終了を適切に処理できない場合があります。ジョブが失敗する場合があり、シャッフルの再計算に長い時間がかかる場合があります。このため、スポットインスタンスを使用する場合は、リリース 5.11.0 以降を使用することをお勧めします。
設定 | 説明 | デフォルト値 |
---|---|---|
|
に設定すると |
|
|
|
|
|
Amazon EMRリリース 5.11.0 以降で使用できます。指定は秒単位です。ノードが廃止状態に移行すると、ホストがこの値以下の期間内に廃止される場合、Amazon はノードを拒否リストを表示するEMRだけでなく、ノードが廃止状態に移行するのを待たずにホスト状態 ( で指定 |
|
|
|
|
|
|
true |
Spark ThriftServer 環境変数
Spark では、Hive Thrift Server Port 環境変数である HIVE_SERVER2_THRIFT_PORT
が 10001 に設定されます。
Spark のデフォルト設定の変更
spark-defaults
設定分類を使用して、spark-defaults.conf
内のデフォルトを変更するか、spark
設定分類の maximizeResourceAllocation
設定を使用します。
次の手順は、 CLIまたは コンソールを使用して設定を変更する方法を示しています。
を使用して spark.executor.memory を 2g に設定してクラスターを作成するには CLI
-
Amazon S3 に格納されている
myConfig.json
ファイルを参照する次のコマンドを使用して、Spark がインストールされ、spark.executor.memory
が 2g に設定されたクラスターを作成します。aws emr create-cluster --release-label
emr-7.3.0
--applications Name=Spark \ --instance-type m5.xlarge --instance-count 2 --service-role EMR_DefaultRole_V2 --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole --configurations https://s3.amazonaws.com/amzn-s3-demo-bucket/myfolder/myConfig.json注記
読みやすくするために、Linux 行連続文字 (\) が含まれています。Linux コマンドでは、これらは削除することも、使用することもできます。Windows の場合、削除するか、キャレット (^) に置き換えてください。
myConfig.json
:[ { "Classification": "spark-defaults", "Properties": { "spark.executor.memory": "2G" } } ]
コンソールを使用して、spark.executor.memory が 2g に設定されたクラスターを作成する
新しい Amazon EMRコンソールに移動し、サイドナビゲーションから古いコンソールに切り替えるを選択します。古いコンソールに切り替えたときの動作の詳細については、「Using the old console」を参照してください。
-
[Create cluster (クラスターの作成)]、[Go to advanced options (詳細オプションに移動する)] の順に選択します。
-
[Spark] を選択します。
-
[Edit software settings] (ソフトウェア設定の編集) で、[Enter configuration] (設定の入力) を選択したままにしておき、次の設定を入力します。
classification=spark-defaults,properties=[spark.executor.memory=2G]
-
他のオプションを選択し、 を選択して、[Create cluster] (クラスターの作成) を選択します。
を設定するには maximizeResourceAllocation
-
Spark がインストールされ、Amazon S3 に保存
myConfig.json
されているファイル を参照しながら AWS CLI、 を使用して true にmaximizeResourceAllocation
設定されたクラスターを作成します。aws emr create-cluster --release-label
emr-7.3.0
--applications Name=Spark \ --instance-type m5.xlarge --instance-count 2 --service-role EMR_DefaultRole_V2 --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole --configurations https://s3.amazonaws.com/amzn-s3-demo-bucket/myfolder/myConfig.json注記
読みやすくするために、Linux 行連続文字 (\) が含まれています。Linux コマンドでは、これらは削除することも、使用することもできます。Windows の場合、削除するか、キャレット (^) に置き換えてください。
myConfig.json
:[ { "Classification": "spark", "Properties": { "maximizeResourceAllocation": "true" } } ]
注記
Amazon EMRバージョン 5.21.0 以降では、クラスター設定を上書きし、実行中のクラスター内のインスタンスグループごとに追加の設定分類を指定できます。これは、Amazon EMRコンソール、 AWS Command Line Interface (AWS CLI)、または を使用して行います AWS SDK。詳細については、「実行中のクラスター内のインスタンスグループの設定を指定する」を参照してください。
Apache Log4j 1.x から Log4j 2.x への移行
Apache Sparklog4j.properties
ファイルを使用して Spark プロセスで Log4j を設定します。Apache Spark リリース 3.3.0 以降のリリースでは、Apache Log4j 2.x とその log4j2.properties
ファイルを使用して Spark プロセスで Log4j を設定します。
6.8.0 未満の Amazon EMRリリースを使用して Apache Spark Log4j を設定した場合は、Amazon 6.8.0 EMR 以降にアップグレードする前に、レガシーspark-log4j
設定分類を削除し、spark-log4j2
設定分類とキー形式に移行する必要があります。レガシーspark-log4j
分類では、Amazon EMRリリース 6.8.0 以降でクラスターの作成が失敗し、ValidationException
エラーが発生します。Log4j の非互換性に関連する障害については課金されませんが、続行するには無効になっている spark-log4j
設定分類を削除する必要があります。
Apache Log4j 1.x から Log4j 2.x への移行に関する詳細は、Github の「Apache Log4j Migration Guide
注記
Amazon ではEMR、Apache Spark は Apache Log4j 移行ガイドlog4j2.properties
ファイルではなく ファイルを使用します。また、Log4j 1.x ブリッジメソッドを使用して Log4j 2.x に変換することはお勧めしません。