Spark程序優化

1.gc時間過長

在spark ui上的現象是時間過長且gc的時間比較長,現象截圖以下:緩存

image

image

原理分析數據結構

平常使用中,咱們經過spark.executor.memory來控制一個executor最多能夠使用的內存大小,其實是經過設置Executor的JVM的Heap大小實現的。ui

Executor的內存界限分明,分別由3部分組成:execution,storage和system。spa

  1. execution
    execution空間經過設置spark.shuffle.memoryFraction參數來控制大小,默認爲0.2。爲了不shuffle,join,排序和聚合這些操做直接將數據寫入磁盤,所設置的buffer大小,減小了磁盤讀寫的次數。3d

  2. storage
    storage空間經過設置spark.storage.memoryFraction參數來控制大小,默認爲0.6。用於存儲用戶顯示調用的persist,cache,broadcast等命令存儲的數據空間。code

  3. system
    程序運行須要的空間,存儲一些spark內部的元數據信息,用戶的數據結構,避免一些不尋常的大記錄帶來的OOM。orm

以前的管理方式,最明顯的就是對execution和storage空間進行了明顯的劃分。舉個例子,一些任務可能對數據緩存的需求並非很高,就會形成storage空間的浪費。blog

 
spark.executor.memory
spark.storage.memoryFraction spark.shuffle.memoryFraction
原來 36G 默認值0.6 默認值0.2
修改後 48G 0.4 0.5

修改後的spark ui 截圖,處理時間從22分鐘降到4.3分鐘排序

image

image

相關文章
相關標籤/搜索