spark記憶體用途:
• rdd儲存
當呼叫rdd 的persist() 或cache() 方法時,這個rdd 的分割槽會被儲存到快取區中。spark 會根據spark.storage.memoryfraction 限制用來快取的記憶體佔整個jvm 堆空間的
比例大小。如果超出限制,舊的分割槽資料會被移出記憶體。
• 資料混洗與聚合的快取區
當進行資料混洗操作時,spark 會建立出一些中間快取區來儲存資料混洗的輸出資料。這些快取區用來儲存聚合操作的中間結果,以及資料混洗操作中直接輸出的部分快取資料。
spark 會嘗試根據spark.shuffle.memoryfraction 限定這種快取區記憶體佔總記憶體的比例。
• 使用者**
spark 可以執行任意的使用者**,所以使用者的函式可以自行申請大量記憶體。例如,如果乙個使用者應用分配了巨大的陣列或者其他物件,那這些都會占用總的記憶體。使用者**可
以訪問jvm 堆空間中除分配給rdd 儲存和資料混洗儲存以外的全部剩餘空間。
在預設情況下,spark 會使用60%的空間來儲存rdd,20% 儲存資料混洗操作產生的資料,剩下的20% 留給使用者程式。使用者可以自行調節這些選項來追求更好的效能表現。如果
使用者**中分配了大量的物件,那麼降低rdd 儲存和資料混洗儲存所占用的空間可以有效避免程式記憶體不足的情況。
Spark記憶體管理
spark的一大特性就是基於記憶體計算,driver只儲存任務的巨集觀性的元資料,資料量較小,且在執行過程中基本不變,不做重點分析,而真正的計算任務task分布在各個executor中,其中的記憶體資料量大,且會隨著計算的進行會發生實時變化,所以executor的記憶體管理才分析的重點。在執行spa...
Spark記憶體管理
spark記憶體管理不是通過物理或者硬體底層api實現對記憶體資源探測,只是通過對記憶體操作過程期間的位元組量的變化不斷更新維護的數字,通過該方式跟蹤記憶體使用情況。spark對每個task都關聯了記憶體的使用量,存放在了map中。嚴格意義上講,spark記憶體的管理是估算量,不是精確量。spark...
Spark 記憶體管理概述
spark被稱作記憶體計算引擎,使得很多初學者認為spark執行環境一定需要大量記憶體,更有甚者,認為spark執行期會把原始資料一次性全部載入到記憶體。解開這些疑團,需要了解spark執行時的機制,spark的計算發生在executor,因此,這裡的執行時機制是指executor的行為。對於spa...