Spark的分佈式存儲系統BlockManager全解析

摘要:BlockManager 是 spark 中相當重要的一個組件,在spark的運行過程當中處處都有 BlockManager 的身影,只有搞清楚 BlockManager 的原理和機制,你才能更加深刻的理解 spark。

§ BlockManager是什麼?

  • BlockManager的做用?我理解是負責作RDD的存儲,如何存下來給後續任務去使用。
    其內部模塊圖以下:

  • 圖中看到有個memoryStore和DiskStore,說明把block作存儲時,有內存和磁盤2種方式,存儲後就都i經過這個Store去管理。
  • 存儲時以Block爲單位,因此會有個映射用的數組
  • 有一個負責和Driver的BlockManagerMaster通訊的引用接口
  • 還有個shuffClient,負責作 備份 和 下載, 即各executor之間會經過shuffClient來作block的傳輸。

§ BlockManager和Driver、executor的關係

其關係如圖:數組

從中能夠看到緩存

  1. blockManagerMaster在driver端生成
  2. executor中生成blockManager,並負責向BMM註冊。
  3. spark中註冊消息經過ActorSystem進行發送

§ 把塊block 存入blockManager的流程

好比特殊的2個地方:spa

  1. 試圖put時,會先看下該blockId是否有緩存,有的話直接取過來,不然就從新建立blockInfo
  2. 存儲時會先判斷內存是否充足,充足就寫入memoryStore,若是不夠會先釋放再嘗試放入。

§ 從blockManager中刪除塊

刪除的操做沒什麼特別的,主要是會判斷一下塊的存儲級別,選擇從不一樣的store中取塊。3d

§ shuffClient 下載block操做

BMMAC就是BlockManagerMasterActor,我當初瞎寫的簡稱orm

  • 注意點:當要取的塊來自好幾個BlockManager時, 把它打亂順序,避免好幾個BM同時從某一個BM上下載數據!

§ shuffeClinet的備份操做

  • BM爲何要備份他的block?書裏做者沒解釋,個人理解是爲了防止節點崩潰或者丟失,致使中間任務沒法繼續執行?
  • 由於其餘的BlockManager能接收的block可能有限,因此備份時可能會涉及多個block, 每次咱們同樣,從BMmaster那裏拿一個 ***隨機***的blockManager作備份,避免都往同一個上備份。

§ BlockManager和Executor、driver的關係:

從中能夠看到blog

  1. blockManagerMaster在driver端生成
  2. executor中生成blockManager,並負責向BMM註冊。
  3. spark中註冊消息經過ActorSystem進行發送

 

點擊關注,第一時間瞭解華爲雲新鮮技術~接口

相關文章
相關標籤/搜索