Spark記憶體管理概覽

2021-08-18 11:40:27 字數 735 閱讀 8097

翻譯自spark官網文件,版本:2.3.0

spark很大一部分記憶體用於storage和execution,即儲存和執行任務。execution memory指的是在shuffle,join,sorts,aggregation操作中使用的記憶體,storage memory指的是用於整個集群快取資料和傳播中間資料的記憶體。

spark中storage和execution分享乙個統一的區域(m),當沒有execution memory被使用,storage可以占用全部可用記憶體,反之亦然。storage占用execution memory時且有必要時execution可以驅逐storage,直到storage memory使用量低於乙個閾值(r)。也就是說r描述了乙個小於m的快取區域,絕不會被驅逐。execution占用storage memory時因為實現複雜所以storage不會驅逐execution。

spark有兩個相關配置項:

1. saprk.memory.fraction,即m,預設為0.6,剩餘的40%是為使用者資料結構,spark內部資料,防止out of memory準備的

2. saprk.memory.storagefraction,即r,預設為0.5。

從這裡可以了解到,從spark web ui上的executors頁面中的storage memory部分看到的資料是storage部分的記憶體。如何知道某個rdd占用多大記憶體空間,最直接的方法是將rdd放進快取中,然後從spark web ui檢視storage memory即可。

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...