Amazon EMR で Spark パラメータを設定するにはどうすればよいですか?

所要時間2分
0

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 の再設定を使用して、クラスターをその場で変更する)

AWS公式
AWS公式更新しました 2年前