hadoop hdfs fsimage和eidts

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

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

2、在NameNode启动时候,会先将fsimage中的文件系统元数据信息加载到内存,然后根据eidts中的记录将内存中的元数据同步至最新状态;所以,这两个文件一旦损坏或丢失,将导致整个HDFS文件系统不可用。这两种文件存放在${dfs.namenode.name.dir}/current/目录下,文件名以edits_和fsimage_命名,该目录为NameNode上的本地目录。

3、为了保证这两种元数据文件的高可用性,一般的做法,将dfs.namenode.name.dir设置成以逗号分隔的多个目录,这多个目录至少不要在一块磁盘上,最好放在不同的机器上,比如:挂载一个共享文件系统。

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

5、由于这两种文件时经过序列化的,非文本的,因此无法直接查看,Hadoop2.X中,hdfs提供了查看这两种文件的工具:

查看fsimage:

命令hdfs oiv用于将fsimage文件转换成其他格式的,如文本文件、XML文件。该命令需要以下参数:

必须参数:

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

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

可选参数:

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

-h,–help           显示帮助信息

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

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

查看eidts:

命令hdfs oev用于查看edits文件。

该命令需要以下参数:

必须参数:

-i,–inputFile <arg>     输入edits文件,如果是xml后缀,表示XML格式,其他表示二进制。

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

可选参数:

-p,–processor <arg>   指定转换类型: binary (二进制格式), xml (默认,XML格式),stats (打印edits文件的静态统计信息)

-h,–help                显示帮助信息

-f,–fix-txids          重置输入edits文件中的transaction IDs

-r,–recover           使用recovery模式,跳过eidts中的错误记录。

-v,–verbose          打印处理时候的输出。

例子:

hdfs oev -i /data1/hadoop/dfs/name/current/edits_0000000000019382469-0000000000019383915 -o /home/hadoop/edits.xml

相关推荐