大資料元件-Hive部署基於MySQL作為後設資料儲存

vjvj1101發表於2022-04-16

在講解內部實現前,我們再回顧下dn持久化檔案幾個重要的點:


dn可以配置多個目錄進行資料塊的儲存


每個這樣的目錄中,都會有一個或多個BP目錄(BlockPool,後面均簡稱為BP)


每個BP下存放各自正在寫的,已經寫完的block檔案,以及block的meta檔案


block資料塊在nn(namenode)中稱為block,在dn中稱為replica,叫法不同而已。


在dn的實現中,磁碟目錄用卷(volume)的概念進行描述,與之對應的是FsVolumeSpi介面和FsVolumeImpl實現類。也就是說配置檔案中每個指定的目錄,都有一個對應的FsVolumeImpl例項物件。


FsVolume中包含一個BlockPoolSlice的字典,記錄該目錄下的所有BP資訊,即一個BlockPoolSlice對應於一個BP。在BlockPoolSlice中,又以不同的欄位分別記錄了current、tmp、rbw、finalized等目錄的位置。


所有的FsVolumeImpl組成一個列表,封裝在FsVolumeList中。FsVolumeList內部還會根據磁碟目錄的是否可用分別存放在不同的列表中。




到這裡,所有的磁碟目錄資訊都已經串聯起來了,那麼關鍵的block資訊存放在哪了呢?


所有replica的資訊均由ReplicaMap進行維護,這裡封裝了一個map,以BlockPoolID為Key,儲存該BlockPool下的所有replica資料,map表中的value也是一個map表,以BlockID為key,記錄replica的詳細資訊。


另外,ReplicaInfo本身是一個抽象父類,不同的子類分別對應正在寫的、已經寫完的replica資訊,這樣就完整的記錄了所有的block資訊。




FsVolumeList與ReplicaMap封裝在FsDataset中,這樣就構成了DataNode中所有檔案系統資料集的抽象。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70016760/viewspace-2887463/,如需轉載,請註明出處,否則將追究法律責任。

相關文章