天天看點

Spark調優--性能調優

前天跟大家聊spark優化,說了個大體上的方案,今天就性能調優跟大家聊聊,首先分如下4塊

一>  配置設定更多資源

配置設定哪些資源?

Executor的數量,每個executor所能配置設定的cpu數量,記憶體量,driver配置設定的記憶體量

在哪裡配置設定呢?

在開發中,送出spark作業時,用的是spark-submit shell腳本,裡面調整對應的參數

Spark調優--性能調優

為什麼得到這些資源以後,性能會得到提升?

 I  如果需要對RDD進行cache,增加了記憶體,那麼可以緩存更多的資料,将更少的資料寫入磁盤,甚至不寫入磁盤,減少了IO操作

II  對于shuffle操作,reduce端在拉去資料進行聚合的時候,入股記憶體不夠,資料會寫到磁盤,reduce就回去磁盤拉去,增加了IO操作,反之,記憶體相對大點,可以直接去記憶體拉,增加速度了

III  對于task的執行,可能會建立很多對象,如果記憶體比較小可能會頻繁導緻JVM堆記憶體滿了,頻繁垃圾回收,增大記憶體,速度會變快

一>  調節并行度

比如說有50個節點(executor),每個節點有3個core,那麼叢集開啟可以一次跑150個task,如果不設定task數量,比如現在100個task開始跑的時候會白白浪費1/3的executor是以,要合理調節task跟core的數量    

設定core跟Tast的數量    官方是推薦,task數量,設定成spark application總cpu core數量的2~3倍,比如150個cpu core,基本要設定task數量為300~500。

Spark調優--性能調優

一>  RDD持久化

将資料持久化到記憶體,下次直接到記憶體取資料,更快

一>  廣播變量

         在我們送出作業的時候,需要傳遞到executor上的task去運作,對于一些固定的資料每次都需要Driver廣播到task上,效率低,廣播變量允許将變量廣播到executor上的BlockManager,這樣以後每個Task擷取變量的時候可以直接在本地的BlockManager上擷取變量了

下篇介紹 shuffle跟jvm調優https://blog.csdn.net/qq_32736999/article/details/84022458

繼續閱讀