Spark性能調優(二)---在實際項目中調節並行度

一、什麼是並行度

並行度,其實就是指,Spark作業中 ,各個stage的task數量,也就代表了Spark作業在各個階段(stage)的並行度。

 

二、並行度過低的危害

假如,在spark-submit腳本里面,給Spark作業分配了足夠多的資源,比如50個executor,每個executor有10G內存,3個cpu core。基本已經達到了集羣或者yarn隊列的資源上限。

task如果設置的過少,比如設置了100個task。擁有的資源中,50個executor,每個executor有3個cpu core,那麼Application任何一個stage運行的時候,都有總數150個的cpu core可以並行運行。但是實際只有100個task,平均分配一下,每個executor分配到2個task,那麼每個executor就會有1個cpu core閒着,造成資源的浪費。

綜上所述,雖然資源分配得足夠多了,但是並行度與資源不匹配,導致分配下去的資源被浪費掉。

合理的並行度的設置,應該要設置得足夠大,大到可以完全合理地利用集羣資源。比如上面的例子,集羣總共有150個cpu core,可以並行運行150個task。那麼就應該將Application的並行度至少設置成150,才能完全有效地利用集羣資源,讓150個task並行執行;而且task增加到150個以後,即可以同時並行運行,還可以讓每個task需要處理的數據量變少;比如總共150G的數據要處理,如果是100個task,每個task需要處理1.5G的數據;現在增加到150個task,每個task只需要處理1G的數據。

只要合理設置並行度,就可以完全充分利用集羣資源,並且可以減少每個task要處理的數據量,最終,提升整個Spark作業的性能和運行速度。

 

三、如何設置合理的並行度

①task數量,至少設置成與Spark Application的總cpu core數量相同(最理想情況,比如總共150個cpu core,分配150個task,一起運行,差不多同一時間運行完畢)

②官方推薦,task數量,設置成Spark Application總cpu core數量的2~3倍,比如150個cpu core,設置300~500個task;

這是因爲,實際情況與理想情況不同,有些task會運行得快一些,比如50S就完了,有些task會慢一些,要2分鐘才運行完,所以如果task數量剛好和集羣cpu core的數量相同,可能會導致資源的浪費,比如有150個task,50個先運行完了,剩下100個沒運行完,這時其中的50個cpu core就會空閒出來,造成資源的浪費。如果task數量設置成集羣cpu core數量的2~3倍,有一個task運行完,就會有其他的task補上來,保證cup core不會被空閒下來,儘量提升Spark作業的效率和速度,提升性能。

③如何設置Spark Application的並行度

設置參數:spark.defualt.parallelism

代碼設置:SparkConf conf = new SparkConf().set("spark.defualt.parallelism","500");

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章