spark submit參數介紹
你能夠經過spark-submit --help或者spark-shell --help來查看這些參數。
使用格式:
./bin/spark-submit \ --class <main-class> \ --master <master-url> \ --deploy-mode <deploy-mode> \ --conf <key>=<value> \ # other options <application-jar> \ [application-arguments]
參數名
格式 參數說明
--master MASTER_URL 如spark://host:port, mesos://host:port, yarn, yarn-cluster,yarn-client, local --deploy-mode DEPLOY_MODE Client或者master,默認是client --class CLASS_NAME 應用程序的主類 --name NAME 應用程序的名稱 --jars JARS 逗號分隔的本地jar包,包含在driver和executor的classpath下 --packages 包含在driver和executor的classpath下的jar包逗號分隔的」groupId:artifactId:version」列表 --exclude-packages 用逗號分隔的」groupId:artifactId」列表 --repositories 逗號分隔的遠程倉庫 --py-files PY_FILES 逗號分隔的」.zip」,」.egg」或者「.py」文件,這些文件放在python app的PYTHONPATH下面 --files FILES 逗號分隔的文件,這些文件放在每一個executor的工做目錄下面 --conf PROP=VALUE 固定的spark配置屬性,默認是conf/spark-defaults.conf --properties-file FILE 加載額外屬性的文件 --driver-memory MEM Driver內存,默認1G --driver-java-options 傳給driver的額外的Java選項 --driver-library-path 傳給driver的額外的庫路徑 --driver-class-path 傳給driver的額外的類路徑 --executor-memory MEM 每一個executor的內存,默認是1G --proxy-user NAME 模擬提交應用程序的用戶 --driver-cores NUM Driver的核數,默認是1。這個參數僅僅在standalone集羣deploy模式下使用 --supervise Driver失敗時,重啓driver。在mesos或者standalone下使用 --verbose 打印debug信息 --total-executor-cores NUM 全部executor總共的核數。僅僅在mesos或者standalone下使用 --executor-core NUM 每一個executor的核數。在yarn或者standalone下使用 --driver-cores NUM Driver的核數,默認是1。在yarn集羣模式下使用 --queue QUEUE_NAME 隊列名稱。在yarn下使用 --num-executors NUM 啓動的executor數量。默認爲2。在yarn下使用
試例:
# Run application locally on 8 cores(本地模式8核)
./bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master local[8] \ /path/to/examples.jar \ 100
# Run on a Spark standalone cluster in client deploy mode(standalone client模式)
./bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master spark://207.184.161.138:7077 \ --executor-memory 20G \ --total-executor-cores 100 \ /path/to/examples.jar \ 1000
# Run on a Spark standalone cluster in cluster deploy mode with supervise(standalone cluster模式使用supervise)
./bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master spark://207.184.161.138:7077 \ --deploy-mode cluster \ --supervise \ --executor-memory 20G \ --total-executor-cores 100 \ /path/to/examples.jar \ 1000
# Run on a YARN cluster(YARN cluster模式)
export HADOOP_CONF_DIR=XXX ./bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master yarn \ --deploy-mode cluster \ # can be client for client mode --executor-memory 20G \ --num-executors 50 \ /path/to/examples.jar \ 1000
# Run on a Mesos cluster in cluster deploy mode with supervise(Mesos cluster模式使用supervise)
./bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master mesos://207.184.161.138:7077 \ --deploy-mode cluster \ --supervise \ --executor-memory 20G \ --total-executor-cores 100 \ http://path/to/examples.jar \ 1000
在公司使用最多的是spark on yarn模式,下面主要講spark on yarn
資源參數調優
所謂的Spark資源參數調優,其實主要就是對Spark運行過程當中各個使用資源的地方,經過調節各類參數,來優化資源使用的效率,從而提高Spark做業的執行性能。
如下參數就是Spark中主要的資源參數,每一個參數都對應着做業運行原理中的某個部分,咱們同時也給出了一個調優的參考值。
num-executors
參數說明:
該參數用於設置Spark做業總共要用多少個Executor進程來執行。Driver在向YARN集羣管理器申請資源時,YARN集羣管理器會盡量按照你的設置來在
集羣的各個工做節點上,啓動相應數量的Executor進程。這個參數很是之重要,若是不設置的話,默認只會給你啓動少許的Executor進程,此時你的
Spark做業的運行速度是很是慢的。
參數調優建議:
每一個Spark做業的運行通常設置50~100個左右的Executor進程比較合適,設置太少或太多的Executor進程都很差。設置的太少,沒法充分利用集羣資源;
設置的太多的話,大部分隊列可能沒法給予充分的資源。
executor-memory
參數說明:
該參數用於設置每一個Executor進程的內存。Executor內存的大小,不少時候直接決定了Spark做業的性能,並且跟常見的JVM OOM異常,也有直接的關聯。
參數調優建議:
每一個Executor進程的內存設置4G~8G較爲合適。可是這只是一個參考值,具體的設置仍是得根據不一樣部門的資源隊列來定。能夠看看本身團隊的資源隊列
的最大內存限制是多少,num-executors乘以executor-memory,是不能超過隊列的最大內存量的。此外,若是你是跟團隊裏其餘人共享這個資源隊列,
那麼申請的內存量最好不要超過資源隊列最大總內存的1/3~1/2,避免你本身的Spark做業佔用了隊列全部的資源,致使別的同窗的做業沒法運行。
executor-cores
參數說明:
該參數用於設置每一個Executor進程的CPU core數量。這個參數決定了每一個Executor進程並行執行task線程的能力。由於每一個CPU core同一時間只能執行一個
task線程,所以每一個Executor進程的CPU core數量越多,越可以快速地執行完分配給本身的全部task線程。
參數調優建議:
Executor的CPU core數量設置爲2~4個較爲合適。一樣得根據不一樣部門的資源隊列來定,能夠看看本身的資源隊列的最大CPU core限制是多少,再依據設置的
Executor數量,來決定每一個Executor進程能夠分配到幾個CPU core。一樣建議,若是是跟他人共享這個隊列,那麼num-executors * executor-cores不要超過
隊列總CPU core的1/3~1/2左右比較合適,也是避免影響其餘同窗的做業運行。
driver-memory
參數說明:
該參數用於設置Driver進程的內存。
參數調優建議:
Driver的內存一般來講不設置,或者設置1G左右應該就夠了。惟一須要注意的一點是,若是須要使用collect算子將RDD的數據所有拉取到Driver上進行處理,
那麼必須確保Driver的內存足夠大,不然會出現OOM內存溢出的問題。
spark.default.parallelism
參數說明:
該參數用於設置每一個stage的默認task數量。這個參數極爲重要,若是不設置可能會直接影響你的Spark做業性能。
參數調優建議:
Spark做業的默認task數量爲500~1000個較爲合適。不少同窗常犯的一個錯誤就是不去設置這個參數,那麼此時就會致使Spark本身根據底層HDFS的block數量
來設置task的數量,默認是一個HDFS block對應一個task。一般來講,Spark默認設置的數量是偏少的(好比就幾十個task),若是task數量偏少的話,就會
致使你前面設置好的Executor的參數都前功盡棄。試想一下,不管你的Executor進程有多少個,內存和CPU有多大,可是task只有1個或者10個,那麼90%的
Executor進程可能根本就沒有task執行,也就是白白浪費了資源!所以Spark官網建議的設置原則是,設置該參數爲num-executors * executor-cores的2~3倍
較爲合適,好比Executor的總CPU core數量爲300個,那麼設置1000個task是能夠的,此時能夠充分地利用Spark集羣的資源。
spark.storage.memoryFraction
參數說明:
該參數用於設置RDD持久化數據在Executor內存中能佔的比例,默認是0.6。也就是說,默認Executor 60%的內存,能夠用來保存持久化的RDD數據。根據你選擇
的不一樣的持久化策略,若是內存不夠時,可能數據就不會持久化,或者數據會寫入磁盤。
參數調優建議:
若是Spark做業中,有較多的RDD持久化操做,該參數的值能夠適當提升一些,保證持久化的數據可以容納在內存中。避免內存不夠緩存全部的數據,致使數據只
能寫入磁盤中,下降了性能。可是若是Spark做業中的shuffle類操做比較多,而持久化操做比較少,那麼這個參數的值適當下降一些比較合適。此外,若是發現
做業因爲頻繁的gc致使運行緩慢(經過spark web ui能夠觀察到做業的gc耗時),意味着task執行用戶代碼的內存不夠用,那麼一樣建議調低這個參數的值。
spark.shuffle.memoryFraction
參數說明:
該參數用於設置shuffle過程當中一個task拉取到上個stage的task的輸出後,進行聚合操做時可以使用的Executor內存的比例,默認是0.2。也就是說,Executor
默認只有20%的內存用來進行該操做。shuffle操做在進行聚合時,若是發現使用的內存超出了這個20%的限制,那麼多餘的數據就會溢寫到磁盤文件中去,此時
就會極大地下降性能。
參數調優建議:
若是Spark做業中的RDD持久化操做較少,shuffle操做較多時,建議下降持久化操做的內存佔比,提升shuffle操做的內存佔比比例,避免shuffle過程當中數據過多
時內存不夠用,必須溢寫到磁盤上,下降了性能。此外,若是發現做業因爲頻繁的gc致使運行緩慢,意味着task執行用戶代碼的內存不夠用,那麼一樣建議調低
這個參數的值。
資源參數的調優,沒有一個固定的值,須要根據本身的實際狀況(包括Spark做業中的shuffle操做數量、RDD持久化操做數量以及spark web ui中顯示的做業gc狀況),
合理地設置上述參數。
資源參數參考示例
如下是一份spark-submit命令的示例,你們能夠參考一下,並根據本身的實際狀況進行調節:
./bin/spark-submit \ --master yarn-cluster \ --num-executors 100 \ --executor-memory 6G \ --executor-cores 4 \ --driver-memory 1G \ --conf spark.default.parallelism=1000 \ --conf spark.storage.memoryFraction=0.5 \ --conf spark.shuffle.memoryFraction=0.3 \
原文地址:https://www.cnblogs.com/haoyy/p/6893943.htmlhtml