hdfs fsimage和editlog
fsimage,namenode的元數據鏡像文件,保存在磁盤
editlog,namenode操作日志
fstime,最近一次的checkpoint時間
metadata,一個文件存儲在哪些DataNode節點的哪些位置的元數據信息
datanode上存儲文件名一般為blk……
打開/usr/local/hadoop/etc/hadoop路徑下的 hdfs-site.xml文件,查看其中的dfs.namenode.name.dir的配置值,並打開對應路徑,就能看到
其中FSImage文件則是不同時間的元數據檢查點,記錄了在對應時間節點下HDFS文件系統的目錄和文件信息。
對於文件來說包括了數據塊描述信息、修改時間、訪問時間等;
對於目錄來說包括修改時間、訪問權限控制信息(目錄所屬用戶,所在組)等。
上圖中editlog_inprogress_0000000000000000002文件則代表此狀態下fsimage已經加載到了編號為0000000000000000001的文件
經過部分操作后:
假設editlog_inprogress文件的后綴編號為0000000000000091059,則代表啟動HDFS的時候只需要讀入edits_inprogress_0000000000000091059日志文件和fsimage_0000000000000091058鏡像文件。
當editlog越來越多,越來越大,在加載fsimage后就需要再加載editlog,就會影響啟動的速度。因此fsimage和editlog在滿足到達一定條件(一定時間或者一定的txns)后就會出發checkpoint機制進行合並。
合並步驟
1、SNN告訴NN滾動inprogress editlog文件,這樣新的操作都會寫到新的editlog文件,同事,NN更新seen_txid
2、SNN通過http get方式從NN獲取最新的fsimage和editlog
3、SNN將fsimage加載到內存,並從editlog中讀取每一次事務,應用到fsimage,這樣就產生了一個新的fsimage
4、SNN將新的fsimage通過http put的方式發送到NN,NN將fsimage保存為臨時fsimage.ckpt文件中
5、NN將fsimage.ckpt文件重命名,此完成了fsimage和editlog的同步
通過hdfs oiv -i fsimage_xxxxxxxxxxxxx指令就能查看fsimage文件內容
還可以用 hdfs oev -i edits_xxxxxxxxxxx -o xxx.xml導出editlog文件至xml文件進行查看
部分內容如下!