spark的cacheManager
這張圖能知道什麼?
Q: spark對RDD的緩存是通過誰去做的?
A: 通過BlockManager去緩存, 並且根據配置選項,決定緩存在文件還是內存中。
driver、executor和BlockManager的關係
從中可以看到
- blockManagerMaster在driver端生成
- executor中生成blockManager,並負責向BMM註冊。
- spark中註冊消息通過ActorSystem進行發送
blockManager包含什麼
- BlockManager的作用?我理解是負責做RDD的存儲,如何存下來給後續任務去使用。
- memoryStore和DiskStore,說明把block做存儲時,有內存和磁盤2種方式,存儲後就都i通過這個Store去管理。
- 存儲時以Block爲單位,所以會有個映射用的數組
- 有一個負責和Driver的BlockManagerMaster通信的引用接口
- 還有個shuffClient,負責做 備份 和 下載
把塊block 存入blockManager的流程
需要注意的一個地方: 當內存不足以放入Block時, 他會先釋放一下,再判斷是否滿足!
從blockManager中刪除塊
紅色方框寫錯了, 應該是如果只支持磁盤存儲,則從DiskStore中調用方法取出block。
shuffClient 下載block操作
BMMAC就是BlockManagerMasterActor,我當初瞎寫的簡稱
- 注意點:當要取的塊來自好幾個BlockManager時, 把它打亂順序,避免好幾個BM同時從某一個BM上下載數據!
shuffeClinet的備份操作
- BM爲什麼要備份他的block?這個書裏沒提!真坑。我的理解是爲了防止節點崩潰或者丟失,導致中間任務無法繼續執行?
- 因爲其他的BlockManager能接收的block可能有限,所以備份時可能會涉及多個block, 每次我們一樣,從BMmaster那裏拿一個 ***隨機***的blockManager做備份,避免都往同一個上備份。