摘要:BlockManager 是 spark 中相當重要的一個組件,在spark的運行過程當中處處都有 BlockManager 的身影,只有搞清楚 BlockManager 的原理和機制,你才能更加深刻的理解 spark。
§ BlockManager是什麼?
- BlockManager的做用?我理解是負責作RDD的存儲,如何存下來給後續任務去使用。
其內部模塊圖以下:
![](http://static.javashuo.com/static/loading.gif)
- 圖中看到有個memoryStore和DiskStore,說明把block作存儲時,有內存和磁盤2種方式,存儲後就都i經過這個Store去管理。
- 存儲時以Block爲單位,因此會有個映射用的數組
- 有一個負責和Driver的BlockManagerMaster通訊的引用接口
- 還有個shuffClient,負責作 備份 和 下載, 即各executor之間會經過shuffClient來作block的傳輸。
§ BlockManager和Driver、executor的關係
其關係如圖:數組
![](http://static.javashuo.com/static/loading.gif)
從中能夠看到緩存
- blockManagerMaster在driver端生成
- executor中生成blockManager,並負責向BMM註冊。
- spark中註冊消息經過ActorSystem進行發送
§ 把塊block 存入blockManager的流程
![](http://static.javashuo.com/static/loading.gif)
好比特殊的2個地方:spa
- 試圖put時,會先看下該blockId是否有緩存,有的話直接取過來,不然就從新建立blockInfo
- 存儲時會先判斷內存是否充足,充足就寫入memoryStore,若是不夠會先釋放再嘗試放入。
§ 從blockManager中刪除塊
![](http://static.javashuo.com/static/loading.gif)
刪除的操做沒什麼特別的,主要是會判斷一下塊的存儲級別,選擇從不一樣的store中取塊。3d
§ shuffClient 下載block操做
![](http://static.javashuo.com/static/loading.gif)
BMMAC就是BlockManagerMasterActor,我當初瞎寫的簡稱orm
- 注意點:當要取的塊來自好幾個BlockManager時, 把它打亂順序,避免好幾個BM同時從某一個BM上下載數據!
§ shuffeClinet的備份操做
![](http://static.javashuo.com/static/loading.gif)
- BM爲何要備份他的block?書裏做者沒解釋,個人理解是爲了防止節點崩潰或者丟失,致使中間任務沒法繼續執行?
- 由於其餘的BlockManager能接收的block可能有限,因此備份時可能會涉及多個block, 每次咱們同樣,從BMmaster那裏拿一個 ***隨機***的blockManager作備份,避免都往同一個上備份。
§ BlockManager和Executor、driver的關係:
![](http://static.javashuo.com/static/loading.gif)
從中能夠看到blog
- blockManagerMaster在driver端生成
- executor中生成blockManager,並負責向BMM註冊。
- spark中註冊消息經過ActorSystem進行發送
點擊關注,第一時間瞭解華爲雲新鮮技術~接口