在HDFS中,fsimage和eidts是NameNode两个非常重要的文件。

其中,fsimage是HDFS文件系统存于硬盘中的元数据检查点,里面记录了自最后一次检查点之前HDFS文件系统中所有目录和文件的序列化信息;而edits保存了自最后一次检查点之后所有针对HDFS文件系统的操作,比如:增加文件、重命名文件、删除目录等等。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

 

在NameNode启动时候,会先将fsimage中的文件系统元数据信息加载到内存,然后根据eidts中的记录将内存中的元数据同步至最新状态;所以,这两个文件一旦损坏或丢失,将导致整个HDFS文件系统不可用。

 

这两种文件存放在${dfs.namenode.name.dir}/current/目录下,文件名以edits_和fsimage_命名,该目录为NameNode上的本地目录。为了保证这两种元数据文件的高可用性,一般的做法,将dfs.namenode.name.dir设置成以逗号分隔的多个目录,这多个目录至少不要在一块磁盘上,最好放在不同的机器上,比如:挂载一个共享文件系统。

 

类似于数据库中的检查点,为了避免edits日志过大,在Hadoop1.X中,SecondaryNameNode会按照时间阈值(比如24小时)或者edits大小阈值(比如1G),周期性的将fsimage和edits的合并,然后将最新的fsimage推送给NameNode。而在Hadoop2.X中,这个动作是由Standby NameNode来完成。

 

其他更详细的关于fsimage和edits的介绍,请参考官方文档或网上资料,很多。这里主要来介绍一下如何查看这两种文件,由于这两种文件时经过序列化的,非文本的,因此无法直接查看,Hadoop2.X中,hdfs提供了查看这两种文件的工具。

HDFS查看fsimage

命令hdfs oiv用于将fsimage文件转换成其他格式的,如文本文件、XML文件。

HDFS的元数据文件fsimage和编辑日志edits Hadoop 第1张

该命令需要以下参数:

必须参数:

-i,–inputFile <arg>      输入FSImage文件.

-o,–outputFile <arg> 输出转换后的文件,如果存在,则会覆盖

可选参数:

-p,–processor <arg>   将FSImage文件转换成哪种格式: (Ls|XML|FileDistribution).默认为Ls.

-h,–help           显示帮助信息

例子1

hdfs oiv -i /data1/hadoop/dfs/name/current/fsimage_0000000000019372521 -o /home/hadoop/fsimage.txt

执行后查看more /home/Hadoop/fsimage.txt

HDFS的元数据文件fsimage和编辑日志edits Hadoop 第2张

由于未指定-p选项,默认为Ls,出来的结果和执行hadoop fs –ls –R一样。

例子2

hdfs oiv -i /data1/hadoop/dfs/name/current/fsimage_0000000000019372521 -o /home/hadoop/fsimage.xml -p XML

指定-p XML,将fsimage文件转换成XML格式,查看fsimage.xml

HDFS的元数据文件fsimage和编辑日志edits Hadoop 第3张

XML文件中包含了fsimage中的所有信息,比如inodeid、type、name、修改时间、权限、大小等等。

例子3:

FileDistribution是分析命名空间中文件大小的工具。为了运行该工具需要通过指定最大文件大小和段数定义一个整数范围[0,maxSize],该整数范围根据段数分割为若干段[0, s[1], …, s[n-1], maxSize],处理器计算有多少文件落入每个段中([s[i-1], s[i]),大于maxSize的文件总是落入最后的段中,即s[n-1], maxSize。输出文件被格式化为由tab分隔的包含Size列和NumFiles列的表,其中Size表示段的起始,NumFiles表示文件大小落入该段的文件数量。在使用FileDistribution处理器时还需要指定该处理器的参数maxSize和step,若未指定默认为0。示例如下:

hdfs oiv -i /data1/hadoop/dfs/name/current/fsimage_0000000000019372521 -o /home/hadoop/fsimage.fd -p FileDistribution maxSize 1000 step 5

查看结果文件fsimage.fd:

head -10 fsimage.fd 

Processed 0 inodes.
Size    	NumFiles
0       	8302
2097152 	474984
4194304 	10995
6291456 	6608
8388608 	4452
10485760        5865
12582912        4747
14680064        2965

tail -10 fsimage.fd

29725032448     1
33241956352     1
58212745216     1
58265174016     1
62084087808     1
totalFiles = 605087
totalDirectories = 100070
totalBlocks = 725265
totalSpace = 42583680916192
maxFileSize = 62083011560

 

下一篇文章中将介绍HDFS编辑日志edits的查看方式,请关注我的博客

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄