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文件进行查看
部分内容如下!