在Driver的DAGScheduler中還有一個很重要的對象BlockManagerMaster,它的功能,其實很簡單,就是負責對各個節(jié)點 的BlockManager內部管理的數據的元數據,進行管理與維護,比如block的增刪等操作,都會在這里維護變化的操作。
每個Worker中的blockManager在創(chuàng)建后的第一件事就是向Driver中的BlockManagerMaster進行注冊 。此時在BlockManagerMaster內部里就會為這個blockManager創(chuàng)建一個BlockManagerInfo
每個BlockManager里面都包括四個組件:
1:DiskStore 負責對磁盤上的文件進行讀寫
2:MemoryStore 負責對內存上的文件進行讀寫
3:ConnectionManager 負責建立BlockManager到遠程其他BlockManager的網絡連接
4:BlockManagerWorker 負責對遠程其他節(jié)點上BlockManager的數據的讀寫
使用BlockManager進行寫操作時,比如說,在的RDD運行過程中的一些中間數據,或者我們手動指定了persist(),優(yōu)先將數據寫入內存,當內存大小不夠時,會使用自己的算法,將內存中部分數據寫入磁盤
此外,如果persist()指定了replicat,那么會使用BlockManagerWorker將數據復制一份到其他 節(jié)點的BlockManager上去。
從BlockManager讀取數據時,比如我們上一章節(jié)說的Shuffle Reader操作時,如果能從本地讀取數據,那么就利用DistStore,或者MemoryStore從磁盤或者內存中從本地讀取數據。
但是如果本地沒有數據,那么就會用CollectionManager于有數據的BlockManager進行連接,然后用BlockManagerWorker從遠程BlockManager讀取數據。
只要使用BlockManager執(zhí)行了數據增刪修改操作,那么必須將block的BlockMaster上報到BlockManaagerMaster上去,在BlockManagerMaster上,會指定BlockManagerMaster上的BlockManagerInfo里的BlockStatus,進行增刪修改,從而達到對元數據的維護。