Amazon EMR で Apache Spark パラメータを設定したいと考えています。
簡単な説明
Spark アプリケーションを設定するには、次の 2 つの方法があります。
- 値をハードコーディングしないように、spark-submit コマンドなどのコマンドライン引数を使用する。
- spark-defaults.conf ファイルの値を設定して、変更を永続的にする。
解決方法
spark-submit を使用して Spark パラメータを設定する
Spark シェルと spark-submit コマンドは、設定を動的にロードする次の 2 つの方法をサポートしています。
- --num-executors などのコマンドラインオプションを使用する。
- フラグ --conf を使用する。
注: spark-submit--help を実行すると、完全なオプションリストが表示されます。
spark-submit コマンドは、spark-defaults.conf から設定オプションを読み取ります。spark-defaults.conf ファイルの各行は、空白で区切られたキーと値で構成されます。
詳細については、「Submitting user applications with spark-submit」(spark-submit を使用したユーザーアプリケーションの送信) を参照してください。
Spark がサポートするパラメータの詳細については、「Spark configuration」(Spark の設定) を参照してください。
最も一般的な設定オプションは次のとおりです。
--class <main-class> \
--master <master-url>
--deploy-mode <deploy-mode>
--conf <key>=<value>
--num-executors <value> \
--executor-memory <value>G \
--driver-memory <value>G \
--executor-cores <number of cores> \
--driver-cores <number of cores> \
--jars <Comma-separated list of jars> \
--packages <Comma-separated list of Maven coordinates> \
--py-files < Comma-separated list of .zip, .egg, or .py files to place on the PYTHONPATH for Python apps> \
spark-submit を使用すると、アプリケーション JAR と --jars オプションに含まれるすべての JAR が自動的にクラスターに転送されます。--jars の後に指定される URL はカンマで区切る必要があります。リストはドライバーとエグゼキューターのクラスパスに含まれ、JAR とファイルはエグゼキューターノード上の各 SparkContext の作業ディレクトリにコピーされます。ディレクトリの拡張は --jars では機能しないことに注意してください。
例
spark-submit --deploy-mode cluster --class org.apache.spark.examples.SparkPi --conf spark.dynamicAllocation.enabled=false --master yarn --num-executors 4 --driver-memory 4G --executor-memory 4G --executor-cores 1 /usr/lib/spark/examples/jars/spark-examples.jar 10
次の例に示すように、フラグ --conf を使用してメモリパラメータを渡すことができます。
spark-submit --deploy-mode cluster --class org.apache.spark.examples.SparkPi --conf spark.dynamicAllocation.enabled=false --master yarn >--conf spark.driver.memory=1G --conf spark.executor.memory=1G /usr/lib/spark/examples/jars/spark-examples.jar 10
カスタム Spark パラメータを使用して spark シェルと pyspark シェルを起動する
spark シェルまたは pyspark シェルを起動するには、次のコマンドを実行します。
spark-shell
spark-shell --conf spark.driver.maxResultSize=1G --conf spark.driver.memory=1G --deploy-mode client --conf spark.executor.memory=1G --conf spark.executor.heartbeatInterval=10000000s --conf spark.network.timeout=10000001s --executor-cores 1 --num-executors 5 --packages org.apache.spark:spark-avro_2.12:3.1.2 --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer'
pyspark shell
pyspark --conf spark.driver.maxResultSize=1G --conf spark.driver.memory=1G --deploy-mode client --conf spark.executor.memory=1G --conf spark.executor.heartbeatInterval=10000000s --conf spark.network.timeout=10000001s --executor-cores 1 --num-executors 5 --packages org.apache.spark:spark-avro_2.12:3.1.2 --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer'
spark-defaults.conf を使用して Spark パラメータを設定する
設定の変更を永続的にするには、設定をファイル /etc/spark/conf/spark-defaults.conf に付加します。その後、Spark History Server を再起動します。次の例では、spark-defaults.conf のエグゼキューターメモリとドライバーメモリを設定します。この例では、各行は空白で区切られたキーと値で構成されています。
例
spark.executor.memory 9486M
spark.driver.memory 9486M
次の設定例では、クラスターの起動時に Spark ドライバーとエグゼキューターメモリを設定します。
{
"Classification": "spark-defaults",
"Properties": {
"spark.executor.memory": "9486M",
"spark.driver.memory": "9486M"
}
}
]
関連情報
Best practices for successfully managing memory for Apache Spark applications on Amazon EMR (Amazon EMR で Apache Spark アプリケーションのメモリを正常に管理するためのベストプラクティス)
Add a Spark step (Spark のステップを追加する)
Modify your cluster on the fly with Amazon EMR reconfiguration (Amazon EMR の再設定を使用して、クラスターをその場で変更する)