我想要在 Amazon EMR 中設定 Apache Spark 參數。
簡短描述
有兩個方法可以設定 Spark 應用程式:
- 使用命令列引數,例如 spark-submit 命令,以避免硬式編碼值。
- 在 spark-defaults.conf 檔案中設定值,進行永久變更。
解決方案
使用 spark-submit 設定 Spark 參數
Spark Shell 和 spark-submit 命令支援兩個方式來動態載入組態:
- 使用命令列選項,例如 --num-executors。
- 使用旗標 --conf。
**注意:**執行 spark-submit--help 以顯示完整的選項清單。
spark-submit 命令也會從 spark-defaults.conf 讀取組態選項。在 spark-defaults.conf 檔案中,每行都包含以空格分隔的索引鍵和值。
如需詳細資訊,請參閱透過 spark-submit 提交使用者應用程式。
如需 Spark 所支援參數的詳細資訊,請參閱 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-shell 和 Pyspark Shell
若要啟用 spark-shell 或 Pyspark Shell,請執行下列命令:
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"
}
}
]
相關資訊
在 Amazon EMR 上成功管理 Apache Spark 應用程式記憶體的最佳實務
新增 Spark 步驟
使用 Amazon EMR 重新組態快速修改您的叢集