跳至內容

我如何在 Amazon EMR 中設定 Spark 參數?

2 分的閱讀內容
0

我想在 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 支援的參數資訊,請參閱 Apache Spark 官方網站上的 Spark 組態

組態選項範例:

--class  \
--master  \
--deploy-mode  \
--conf = \
--num-executors  \
--executor-memory G \
--driver-memory G \
--executor-cores  \
--driver-cores  \
--jars  \
--packages  \
--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 後提供的網址。spark-submit 會將清單包含在 driver 和 executor 的類路徑中,並將 JAR 及檔案複製到每個執行程式節點的 SparkContext 工作目錄中。

**注意:**目錄展開無法與 --jars 一起使用。

spark-submit 命令範例:

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 歷史記錄伺服器。以下範例在 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 上,spark.yarn.executor.memoryOverhead 組態的預設值為 18.75%,而標準 Spark 的預設值為 0.1875%。一旦設定好 Spark 作業,請監控其效能並分析資源使用情況,以收集見解並進一步調整作業參數。

相關資訊

AWS 開放資料分析

新增 Spark 步驟

使用 Amazon EMR 重新組態即時修改叢集

AWS 官方已更新 3 個月前