第一:結構
1:下圖是FSImage數據結構圖
以看出,fsimage保存有如下信息:
1. 首先是一個image head,其中包含:
a) imgVersion(int):當前image的版本信息
b) namespaceID(int):用來確保別的HDFS instance中的datanode不會誤連上當前NN。
c) numFiles(long):整個文件系統中包含有多少文件和目錄
d) genStamp(long):生成該image時的時間戳信息。
2. 接下來便是對每個文件或目錄的源數據信息,如果是目錄,則包含以下信息:
a) path(String):該目錄的路徑,如”/user/build/build-index”
b) replications(short):副本數(目錄雖然沒有副本,但這里記錄的目錄副本數也為3)
c) mtime(long):該目錄的修改時間的時間戳信息
d) atime(long):該目錄的訪問時間的時間戳信息
e) blocksize(long):目錄的blocksize都為0
f) numBlocks(int):實際有多少個文件塊,目錄的該值都為-1,表示該item為目錄
g) nsQuota(long):namespace Quota值,若沒加Quota限制則為-1
h) dsQuota(long):disk Quota值,若沒加限制則也為-1
i) username(String):該目錄的所屬用戶名
j) group(String):該目錄的所屬組
k) permission(short):該目錄的permission信息,如644等,有一個short來記錄。
3. 若從fsimage中讀到的是一個文件,則還會額外包含如下信息:
a) blockid(long):屬於該文件的block的blockid,
b) numBytes(long):該block的大小
c) genStamp(long):該block的時間戳
3中是Block類的成員變量;通過BlockMap繼承了Block類且新增了自己的成員變量;如下圖:
最后是通過BlockInfo對象來實現block和datanode對應的。
為什么以上訴形式保存這個block對應datanode的list?
Namenode采用這種結構來保存block->datanode list的目的在於節約namenode內存。由於namenode將block->datanodes的對應關系保存在了內存當中,隨着HDFS中文件數的增加,block數也會相應的增加,namenode為了保存block->datanodes的信息已經耗費了相當多的內存,如果還像這種方式一樣的保存datanode->block list的對應表,勢必耗費更多的內存,而且在實際應用中,要查一個datanode上保存的block list的應用實際上非常的少,大部分情況下是要根據block來查datanode列表,所以namenode中通過上圖的方式來保存block->datanode list的對應關系,當需要查詢datanode->block list的對應關系時,只需要沿着該數據結構中next Block的指向關系,就能得出結果,而又無需保存datanode->block list在內存中。
總結: Namenode在內存中保存着整個文件系統的名字空間和文件數據塊映射(Blockmap)的映像;其中文件系統的名字空間通過FSImage文件保存在本地操作系統的文件中;文件數據映射就是在讀取FSImage文件時會添加額外內容BlockMap;這個內容沒有永久性固化,而是在內存中存有。這個文件是NameNode功能的核心;它是可以永久性固化,就需要經常使用Load和Save操作,來實現這個過程。
2:EditsLog文件:
在HDFS中創建一個文件,Namenode就會在Editlog中插入一條記錄來表示;同樣地,修改文件的副本系數也將往Editlog插入一條記錄。Namenode在本地操作系統的文件系統中存儲這個Editlog。設計出它的目的就是不想一改就全部修改FSImage內容,而是修改那些變動的內容;且在宕機時,也需要用它和前期的FSImage來創建內存中的FSImage。
如下圖得出原因:
存放的文件位置如下:
第二:流程
1:第一檢查點,就是NN啟動時將FSImage內容加載到內存中,通過輸入輸出流;
2:初始化NN的BlockMap;等待DN的反饋信息。
3:之后就是循環檢查點,每次的檢查是發生在DN啟動時,當一個Datanode啟動時,它會掃描本地文件系統,產生一個這些本地文件對應的所有HDFS數據塊的列表,然后作為報告發送到Namenode,這個報告就是塊狀態報告,NN根據這個信息構造BlockInfo對象更新這個對象。
未完待續。。。。
http://hi.baidu.com/yumovrldlubhvxq/item/d2105ce99d19073f8d3ea88e