Spark-submit

spark submit 的動作可以把spark job 上 cluster 去執行。

基本指令如下,可以做一些參數設定,我們也可以在程式中建立 sparkSession(後面會講) 的時候做設定,先舉個例子

spark-submit \

--master yarn \

--deploy-mode client \

--num-executors 40 \

--driver-memory 16g \

--executor-memory 16g \

--executor-cores 4 \

--queue high \

--conf spark.default.parallelism=600

逐一介紹一下

  • --master : 指你的 spark job 要執行在什麼環境,這邊跑在 yarn 上所以指定 yarn ;倘若要在本地跑,也可以指定 local 或是 local[*],前者沒有平行化運算,只會有一個 Worker,後者則是有多少個 cores 就用多少個 cores。

  • --deploy-mode : 這裡設定你的 driver 要部屬在哪裡,在本地的設 "client",在叢集的設 "cluster"。

  • --num-excecutors : executor 的數量,相當於 configure 中設定的 spark.executor.instances。

  • --driver-memory : driver 的 記憶體大小,相當於 configure 中設定的 spark.driver.memory;在 client mode 的時候要注意,一定要用這個指令或是寫在 .conf 裡頭,因為在 client mode,driver在 submit 的時候就已經被建立起來了。預設是1g。

  • --excutor-memory : 每個 executor 的記憶體大小,相當於 configure 中設定的 spark.executor.memory。預設是 1g。

  • --executor-cores : 每個 executor 可以用到的 CPU 數量。

  • --queue : 在 hadoop,是可以設定 不同的 queue,可以根據需求有不同的配置,用途其實是在於區分 job 的用途或是即時性。

  • --conf : <key>=<value>,透過這樣的格是設定 參數,例如 : spark.executor.memory=16g

  • --driver-class-path : 附加檔案到 driver 主要針對 class

  • --jar : 附加 jar 檔,會帶到每個 worker

spark.default.parallelism :設定的是預設 partition 數量。 但要注意的是 shuffle 階段,預設會變成 200 個 partitions 。

spark.sql.shuffle.partitions :shuffle 階段最後會生成的 partition 數量,預設 200。

spark.shuffle.memoryFraction :ExecutionMemory,這快記憶體區域的配置是為了解決 shuffles,joins, sorts and aggregations 過程中為了避免頻繁IO需要的buffer。預設是 0.2

spark.storage.memoryFraction :StorageMemory,這塊記憶體區域是為了解決 block cache 以及 broadcasts 、 task results的存儲。預設是 0.2

reference : https://spark.apache.org/docs/latest/configuration.html

Last updated