Spark 二 記憶體管理

2021-08-21 18:07:33 字數 772 閱讀 4966

spark 作為乙個以擅長記憶體計算為優勢的計算引擎,記憶體管理方案是其非常重要的模組; spark的記憶體可以大體歸為兩類:execution和storage,前者包括shuffles、joins、sorts和aggregations所需記憶體,後者包括cache和節點間資料傳輸所需記憶體;在spark 1.5和之前版本裡,兩者是靜態配置的,不支援借用,spark1.6 對記憶體管理模組進行了優化,通過記憶體空間的融合,消除以上限制,提供更好的效能。官方**只是要求內存在8gb之上即可(impala推薦要求機器配置在128gb), 但spark job執行效率主要取決於:資料量大小,記憶體消耗,核心數(確定併發執行的task數量)

目錄:

基本知識:

spark1.5- 記憶體管理:

小結:

spark1.6 記憶體管理:

一方空閒,一方記憶體不足情況下,記憶體不足一方可以向空閒一方借用記憶體

只有execution memory可以強制拿回storage memory在execution memory空閒時,借用的execution memory的部分記憶體(如果因強制取回,而storage memory資料丟失,重新計算即可)

如果storage memory只能等待execution memory主動釋放占用的storage memory空閒時的記憶體。(這裡不強制取回,因為如果task執行,資料丟失就會導致task 失敗)

**:

Spark記憶體管理

spark記憶體用途 rdd儲存 當呼叫rdd 的persist 或cache 方法時,這個rdd 的分割槽會被儲存到快取區中。spark 會根據spark.storage.memoryfraction 限制用來快取的記憶體佔整個jvm 堆空間的 比例大小。如果超出限制,舊的分割槽資料會被移出記憶體...

Spark記憶體管理

spark的一大特性就是基於記憶體計算,driver只儲存任務的巨集觀性的元資料,資料量較小,且在執行過程中基本不變,不做重點分析,而真正的計算任務task分布在各個executor中,其中的記憶體資料量大,且會隨著計算的進行會發生實時變化,所以executor的記憶體管理才分析的重點。在執行spa...

Spark記憶體管理

spark記憶體管理不是通過物理或者硬體底層api實現對記憶體資源探測,只是通過對記憶體操作過程期間的位元組量的變化不斷更新維護的數字,通過該方式跟蹤記憶體使用情況。spark對每個task都關聯了記憶體的使用量,存放在了map中。嚴格意義上講,spark記憶體的管理是估算量,不是精確量。spark...