DataNode内部的各种数据结构
? ?DateNode的功能主要分為三大類:和DFSClient的交互;和NameNode的交互;本身提供數(shù)據(jù)存儲(chǔ)的功能。
? ?DataNode引用了FSDataset來提供數(shù)據(jù)存儲(chǔ)功能,?FSDataset是這個(gè)存儲(chǔ)結(jié)構(gòu)的入口,對(duì)于DataNode上面所有的Block的操作都要經(jīng)過FSDataset,由此管理在此DataNode上存儲(chǔ)的block。FSDataset的類圖如下:
??
?
?
?
DataStorage
DataStorage主要提供存儲(chǔ)元信息,如文件目錄,存儲(chǔ)目錄的狀態(tài)轉(zhuǎn)移管理,Version文件等等。
DataStorage內(nèi)部有一個(gè)List<StorageDirectory>數(shù)據(jù)結(jié)構(gòu),表示此DataNode的存儲(chǔ)目錄,DataNode的存儲(chǔ)目錄可以是多個(gè)的,這樣的好處是一個(gè)目錄壞了不至于把整個(gè)DataNode都下線了,這樣還可以在DataNode上掛載不同的文件系統(tǒng),數(shù)據(jù)寫入不同的文件系統(tǒng)。這個(gè)目錄列表是在hdfs-site.xml中配置的dfs.data.dir的值。
DataStorage的重頭戲是存儲(chǔ)目錄的狀態(tài)轉(zhuǎn)移管理,在DataNode啟動(dòng)的時(shí)候可以帶上參數(shù):
- FORMAT("-format"):格式化系統(tǒng)
- REGULAR("-regular"):正常啟動(dòng)
- UPGRADE("-upgrade"):升級(jí)
- ROLLBACK("-rollback"):回滾
- FINALIZE("-finalize"):提交
- IMPORT("-importCheckpoint"):從Checkpoint恢復(fù)
這樣就可以做相應(yīng)的操作,在做這些操作時(shí)有可能會(huì)中途失敗,所以DataNode需要管理具體的狀態(tài)以便在下次啟動(dòng)操作時(shí)可以先處理之前的異常狀態(tài),當(dāng)異常狀態(tài)處理不了的時(shí)候,需要拋出異常。狀態(tài)轉(zhuǎn)移大致如下:
圖中展現(xiàn)出DataNode升級(jí)和回滾時(shí)的一些狀態(tài)轉(zhuǎn)移。
當(dāng)DataNode啟動(dòng)時(shí),DataStorage就會(huì)調(diào)用recoverTransitionRead方法檢查dfs.data.dir配置的每個(gè)文件目錄,首先分析每個(gè)目錄現(xiàn)在的子目錄的存在情況(DataStorage.analyzeStorage),返回StorageState;根據(jù)返回的StorageState會(huì)做相應(yīng)的操作(DataStorage.doRecover),就是做上圖展現(xiàn)的一系列操作。
??
FSDataset
FsDataset包含F(xiàn)SVolumeSet,FSVolumeSet包含F(xiàn)SVolume的數(shù)組,一般來說dfs.data.dir配置的每一個(gè)目錄都對(duì)應(yīng)著一個(gè)FSVolume,每個(gè)FSVolume落實(shí)到文件系統(tǒng)上至少包含了如下文件夾:current,tmp,detach,blocksBeingWritten目錄;current目錄表示當(dāng)前正常block的存儲(chǔ)目錄,tmp目錄表示datanode之間復(fù)制時(shí)block臨時(shí)存儲(chǔ)目錄,blocksBeingWritten表示DFSClient寫數(shù)據(jù)或者替換block時(shí)block臨時(shí)存儲(chǔ)目錄,detach目錄表示copy-on-write時(shí)候copy出來的block的存儲(chǔ)目錄,用于DFSClient append一個(gè)已有的block時(shí)使用。
current目錄是一個(gè)FSDir類表示的結(jié)構(gòu),FsDir有一個(gè)FsDir的數(shù)組,表示FsDir的子目錄,每個(gè)FsDir可以存儲(chǔ)dfs.datanode.numblocks個(gè)Block,如果存不下就需要存在子FsDir中了。
轉(zhuǎn)載于:https://www.cnblogs.com/nod0620/archive/2012/08/10/2624785.html
總結(jié)
以上是生活随笔為你收集整理的DataNode内部的各种数据结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JQuery-让Ajax变的更简单
- 下一篇: hdu 1006 Tick and Ti