fsimage = name table  ,  存放namonode中所有数据,运行时数据加载到内存中存放

edits_inprogress 类似于LSM树中的Log,在向hdfs写的过程都向此文件存放,
                 当存的数据到一定程度/或者定期间隔多久,会把此文件内容跟新到fsimage
     刚开始写数据时会同时向namonode内存和edit中写,
     此时立刻读取刚写入的数据是读取namenode内存和原fsimage内存的数据,
     在当edits的数据合并到fsimage时,在读取写入的那个数据就会在fsimage中读取。

 

 

 

 

hadoop fsimage edits关系_数据


 

 

 

hadoop fsimage edits关系_数据_02


 

1.SNN CheckPoint的处理流程
配置中配置做CheckPoint的两个条件,一个是文件大小editlog大于多大就做,另一个是时间维度,多长时间做一次。
(1)SNN首先检查是否需要进行checkpoint操作,如果上面两个条件任何一个满足了就可以
(2)通过RPC 向NameNode发送请求,rollEditLog()NameNode关闭现在的edit的stream,同时生成一个edit.new,并打开加入写入的源。
(3)SNN从NN处download fsimage文件和edit文件并进行merge
(4)merge结束后通知NN从SNN处拉去FSImage文件保存在NN的FSImage.ckpt上面
(5)一切顺利结束的话将edit.new重命名为edit,并open stream,将FSImage.ckpt重命名为FSImage,更新FSTime文件,更新时间戳
 
 

2、NN重启对Image和Edits的处理
先对各个目录的image和edit文件有效性进行判断,同时读取checkpoint的最近值。
如果image.ckpt存在,同时edit.new存在那么也许正进行一半,无法确定是否完成image拉取,删掉image.ckpt。否则将image.ckpt rename到image。
然后正常的读取FSImage,将edit merge进去。
如果存在edit.new 也merge进去。