Spark性能調優(一)---在項目中分配更多的資源

一、分配更多資源

性能調優的王道,就是增加和分配更多的資源,性能和速度上會得到很大提升。基本上,在一定的範圍之內,增加的資源和性能的提升是成正比的。所以,性能調優的第一步是增加資源,調節最優的資源配置;第二步,能夠分配的資源達到能力範圍的頂端都,無法再分配更多的資源,需要考慮下面幾個性能調優的點。

 

二、性能調優的點

①分配哪些資源?

  • executor
  • cup per executor
  • memory per executor
  • driver memory

②在哪裏分配資源?

在我們的生產環境中,提交spark作業時,用的spar-submit shell腳本,調整對應的參數

/usr/local/spark/bin/spark-submit \

--class cn.spark.sparktest.core.WordCountCluster \

--num-executors 3 \  配置executor的數量

--driver-memory 100m \  配置driver的內存(影響不大)

--executor-memory 100m \  配置每個executor的內存大小

--executor-cores 3 \  配置每個executorcpu core數量

/usr/local/SparkTest-0.0.1-SNAPSHOT-jar-with-dependencies.jar \

 

③調節到多大才算最大?

第一種,Spark Standalone,公司的Spark集羣上,根據實際情況,調節每個spark作業的資源分配。比如集羣有30臺機器,每臺機器8G內存,4個cpu core;20個executor;那麼,每個executor分配12G內存,6個cpu core。

第二種,Yarn。spark作業提交到yarn資源隊列執行,需要查看隊列剩下的可以使用的資源。比如500G內存,200個cpu core;50個executor;那麼每個executor分配10G內存,4個cpu core。

 

三、爲什麼調節了資源之後,性能可以提升?

①增加executor

如果executor的數量少,那麼能夠 並行執行的task數量就會變少,這就意味着Application的並行執行能力比較弱。

比如有3個executor,每個executor有2個cpu core,那麼同時能夠執行的task數量爲6個。執行完當前的6個task後,再執行下一批6個task。

增加了executor後,能夠並行執行的task的數量就會變多,就以爲着性能得到提升。

②增加每個executor的cpu core

根據上面一點,Application的並行執行能力跟每個executor的cpu core數量有關。

比如,原來有20個executor,每個executor有2個cpu core,那麼並行執行的task數量爲40個;

現在還是20個executor,把每個executor的數量增加到5個,那麼並行執行的task數量爲100個,性能提升了2.5倍。

③增加每個executor的內存

增加每個executor的內存,對性能的提升有3點:

  • 如果需要對RDD進行cache,更多的內存意味着可以緩存更多的數據,將更少的數據寫入磁盤,甚至不寫入磁盤,減少了磁盤IO,性能得到提升;
  • 對於shuffle操作,reduce端需要內存,來存放拉取過來的數據並進行聚合。如果內存不夠,會寫入磁盤。如果給executor分配更多的內存,那麼需要寫入磁盤的數據就會變少,甚至沒有數據需要寫入磁盤,減少了磁盤IO,性能得到提升;
  • 對於task的執行,可能需要創建對象。如果內存比較小,可能會導致頻繁的JVM存內存滿了,然後頻繁的GC垃圾回收(minor GC和full GC),導致性能下降。內存加大之後,GC變少了,避免了性能下降,性能得到提升。

 

 

 

 

 

 

 

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