driver有blockManagerMaster,負(fù)責(zé)對各個節(jié)點(diǎn)上的blockManager內(nèi)部管理數(shù)據(jù)的元數(shù)據(jù)就行維護(hù),比如block增刪改等操作,都會在這里維護(hù)元數(shù)據(jù)變量。
每個BlockManager在啟動之后,做的第一件事,就是向BlockMangerMaster進(jìn)行注冊,此時BlockManagerMaster會為其創(chuàng)建對應(yīng)的BlockManagerInfo。
使用BlockManger時執(zhí)行了寫操作,比如RDD運(yùn)行中的一些中間數(shù)據(jù),或者我們手動指定的Cache或Persist。比如緩存級別設(shè)置的是(MEMORY_AND_DISK),那么會優(yōu)先將數(shù)據(jù)寫入到內(nèi)存,如果內(nèi)存大小不夠,在使用硬盤。
此外如果Persist指定的緩存級別是_2,帶復(fù)制的這種,那么會使用BlockManagerWorker將數(shù)據(jù)Replicate一份到其他節(jié)點(diǎn)的BlockManager。
只要使用BlockManager執(zhí)行了數(shù)據(jù)的增刪改操作,那么必須將Block的BlockStatus上報到BlockManagerMaster上去,在BlockManagerMaster上,會對指定的BlockManager的BlockManagerInfo內(nèi)部的BlockStatus進(jìn)行增刪改操作,從而達(dá)到維護(hù)元數(shù)據(jù)的功能。
每個節(jié)點(diǎn)上都有BlockManager,有幾個關(guān)鍵組件DiskStore,負(fù)責(zé)對磁盤上的數(shù)據(jù)進(jìn)行讀寫。
MemoryStore,負(fù)責(zé)對內(nèi)存上的數(shù)據(jù)進(jìn)行讀寫。
ConnectionManager,負(fù)責(zé)建立BlockManager到遠(yuǎn)程其他節(jié)點(diǎn)的BlockManager的網(wǎng)絡(luò)連接。
BlockManagerWorker,負(fù)責(zé)對遠(yuǎn)程其他節(jié)點(diǎn)的BlockManager的數(shù)據(jù)讀寫。
從BlockManager讀取數(shù)據(jù)時,比如說shuffle Read的操作,如果能從本地讀數(shù)據(jù),那么就和DiskStore或MomoryStore從本地來讀取數(shù)據(jù),但是如果本地沒有數(shù)據(jù)的話,就會用ConnectionManager與有數(shù)據(jù)的BlockManager建立連接,然后用BlockManagerWorkrer從遠(yuǎn)程的BlockManager讀取數(shù)據(jù)。