> For the complete documentation index, see [llms.txt](https://lin-guan-ting.gitbook.io/apache-spark/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lin-guan-ting.gitbook.io/apache-spark/launch-a-spark-program/spark-submit.md).

# 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&#x20;
> * \--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>
