並行度:Spark 做業中,會根據 action 操做劃分紅多個 job,每一個 job 中會根據 shuffle 劃分紅多個 stage,每一個 stage 會分配多個 task 去執行,各個 stage 劃分的 task 數量就表明了 Spark 做業在該 stage 的並行度。java
假設 Spark 做業的處理的數據量是不變的,這些數據會被分配到每一個 task 中去處理,在集羣配置資源分配好的狀況下,提高並行度,至關於分配越多的 task,這樣每一個 task 分配的數據量就會越少,有助於提高執行效率。shell
固然也不是無限提高就有好處,這和 executor 分配的 core 的數量有關,每一個 core 一次只能執行一個 task,因此並行度的調整和 core 的數量有很大關係。spa
好比,咱們在 spark-submit 的 shell 腳本中配置了 50 個 executor,每一個 executor 有 10g 內存和 3 個 core。這樣的配置已經達到了集羣或者 yarn 資源隊列的上限。這時候咱們來調整並行度,50 個 executor,每一個 executor 有 3 個 core,那麼一共有 150 個 core,若是咱們這時候設置的並行度爲 100 個,那麼能夠看出在每一個 stage 執行任務的 task 數量只有 100 個,executor 用來執行 task 的 core 還有 50 個沒被利用。至關於資源被浪費了。code
1,task 的數量至少應該設置成和集羣中配置的 core 數量一致。隊列
2,官方推薦的是:task 的數量,設置成 core 數量的 2~3 倍。內存
這是由於:實際生產狀況下,有些 task 的運行會快一點,好比 50s 就結束了,有些慢一點,好比 1 分鐘,在這種狀況下,避免讓 core 有空閒,形成資源浪費,能夠讓 task 的數量多一點,這樣能夠讓結束較快的 task 對應的 core 不會空閒下來。資源
3,設置方式:string
SparkConf conf = new SparkConf()
.set("spark.default.parallelism", "500")
.xxx
複製代碼