Fsimage 和 Edits 解析
1、Fsimage和Edits概念
NameNode被格式化之后,将在所配置的存储目录中产生如下文件,fsimage和editslog文件存储在dfs.namenode.name.dir所设的路径下。
Fsimage,Editlog 主要用于在集群启动时将集群的状态恢复到关闭前的状态。为了达到这个目的,集群启动时将 Fsimage、Editlog 加载到内存中进行合并,合并后恢复完成。
(1)Fsimage文件:HDFS文件系统元数据的一个永久性的检查点,其中包含HDFS文件系统的所有目 录和文件inode的序列化信息。
(2)Edits文件:存放HDFS文件系统的所有更新操作的路径,文件系统客户端执行的所有写操作首先 会被记录到Edits文件中。
(3)seen_txid文件保存的是一个数字,就是最后一个edits_的数字
(4)每 次NameNode启动的时候都会将Fsimage文件读入内存,加 载Edits里面的更新操作,保证内存 中的元数据信息是最新的、同步的,可以看成NameNode启动的时候就将Fsimage和Edits文件进行了合并。
2、概述:
HDFS中解析fsImage的工具是 Offline Image Viewer ,对应的命令是hdfs oiv。Offline Image Viewer提供了几下几种处理器:
XML:将fsimage文件中的所有内容解析为XML格式的文件,该处理器的输出可以通过XML工具进行自动化处理和分析。由于XML语法的冗长,该处理器生成的输出文件非常大。
FileDistribution:分析namespace image中的文件大小分布的一个工具
Web:启动一个HTTP服务,对外暴露一个只读的WebHDFS API。不支持secure 模式。
Delimited(experimental):生成一个文本文件,其中包含inodes-under-construction和inode所共有的所有元素,用分隔符分隔,默认分隔符是\t,但可以通过-delimiter参数更改。
ReverseXML(experimental):对应XML processor,将XML格式的文件反解析为FSImage。这个处理器可以很容易地创建用于测试的fsimages,并在fsimage出现损坏时手动编辑fsimages。
选项说明:
-i,–inputFile 必选项,指定FSImage或者XML文件
-o,–outputFile 可选项,指定输出文件,默认是stdout
-p,–processor 可选项,指定processor,默认是Web processor
-delimiter 可选项,用于使用Delimited processor时,指定输出字符串的分隔符
-t,–temp 可选项,用于使用Delimited processor时,指定临时目录缓存输出。
3、获取fsimage文件:
hdfs dfsadmin -fetchImage <path>
4、统计文件整体情况
hdfs oiv -p FileDistribution -i fsimage_0000000000000024082 -o <filename>
5、XML使用示例、
hdfs oiv -p XML -i fsimage_0000000000000024082 -o fsimage.xml
6、Delimited使用示例
hdfs oiv -i fsimage_0000000000000024082 -p Delimited
hdfs oiv -i fsimage_0000000003621277730 -t /temp/dir -o /data/fs_distribution -p Delimited -delimiter “,”(-t使用临时文件处理中间数据 不加的话全部使用内存 容易OOM)