spark的內存管理機制學習——BlockManager
首先最關鍵的模塊就是Spark中的BlockManager。學習一下。
§?BlockManager是什么?
BlockManager的作用?我理解是負責做RDD的存儲,如何存下來給后續任務去使用。
其內部模塊圖如下:
圖中看到有個memoryStore和DiskStore,說明把block做存儲時,有內存和磁盤2種方式,存儲后就都i通過這個Store去管理。
存儲時以Block為單位,所以會有個映射用的數組
有一個負責和Driver的BlockManagerMaster通信的引用接口
還有個shuffClient,負責做?備份?和?下載, 即各executor之間會通過shuffClient來做block的傳輸。
§?BlockManager和Driver、executor的關系
其關系如圖:
從中可以看到
blockManagerMaster在driver端生成
executor中生成blockManager,并負責向BMM注冊。
spark中注冊消息通過ActorSystem進行發送
§?把塊block 存入blockManager的流程
比如特殊的2個地方:
試圖put時,會先看下該blockId是否有緩存,有的話直接取過來,否則就重新創建blockInfo
存儲時會先判斷內存是否充足,充足就寫入memoryStore,如果不夠會先釋放再嘗試放入。
§?從blockManager中刪除塊
刪除的操作沒什么特別的,主要是會判斷一下塊的存儲級別,選擇從不同的store中取塊。
§?shuffClient 下載block操作
BMMAC就是BlockManagerMasterActor,我當初瞎寫的簡稱
注意點:當要取的塊來自好幾個BlockManager時, 把它打亂順序,避免好幾個BM同時從某一個BM上下載數據!
§?shuffeClinet的備份操作
因為其他的BlockManager能接收的block可能有限,所以備份時可能會涉及多個block, 每次我們一樣,從BMmaster那里拿一個 ***隨機***的blockManager做備份,避免都往同一個上備份。
§?BlockManager和Executor、driver的關系:
從中可以看到
blockManagerMaster在driver端生成
executor中生成blockManager,并負責向BMM注冊。
spark中注冊消息通過ActorSystem進行發送
EI企業智能 智能數據 數據湖治理中心 DGC
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。