在spark ui上的現象是時間過長且gc的時間比較長,現象截圖以下:緩存
原理分析數據結構
平常使用中,咱們經過spark.executor.memory
來控制一個executor最多能夠使用的內存大小,其實是經過設置Executor的JVM的Heap大小實現的。ui
Executor的內存界限分明,分別由3部分組成:execution,storage和system。spa
execution
execution空間經過設置spark.shuffle.memoryFraction
參數來控制大小,默認爲0.2。爲了不shuffle,join,排序和聚合這些操做直接將數據寫入磁盤,所設置的buffer大小,減小了磁盤讀寫的次數。3d
storage
storage空間經過設置spark.storage.memoryFraction
參數來控制大小,默認爲0.6。用於存儲用戶顯示調用的persist,cache,broadcast等命令存儲的數據空間。code
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分鐘排序