NameNode文件結構
最新格式化的NameNode會創建以下的目錄結構:
${dfs.name.dir}/current/VERSION
/edits
/fsimage
/fstime
dfs.name.dir屬性是一個目錄列表,是每個目錄的鏡像。VERSION文件是Java屬性文件,其中包含運行HDFS的版本信息。
一個典型VERSION文件所包含的內容:
#web Mar 23 16:03:27 CST 2011
namespaceID=1064465394
cTime=0
storageType=NAME_NODE
layoutVersion=-18
namespaceID是文件系統的唯一標識符,當文件系統第一次格式化時便會被創建,這個標識也要求各DataNode節點和NameNode保持一致。NameNode會使用它識別新的DataNode,DataNode只有在想NameNode註冊後纔會獲得此namespaceID。cTime屬性標記了NameNode存儲空間創建的時間。對於新格式化的存儲空間,這裏的屬性值雖爲0,但是隻要文件系統被更新,它就會更新到一個新的時間戳上。storageType指出此存儲目錄包含一個NameNode的數據結構,在DataNode中它的屬性值爲DATA_NODE。
layoutVersion是一個負的整數,定義了HDFS持久數據結構的版本。每次HDFS的佈局發生改變,該版本號就會遞減,在這種情況下,HDFS就需要更新升級了,因爲一個新的NameNode或DataNode如果還處在舊版本上,系統就無法正常運行,各節點的版本號需要一致。
在NameNode的存儲目錄中包含edits、fsimage、fstime三個文件。他們都是二進制文件,可以通過HadoopWritable對象進行序列化。
編輯日誌(dedit log)及文件系統映像(filesystem image)