FSImage文件主要是用来存储hdfs文件系统元数据信息(文件及目录结构 组成文件的块的信息 副本数量信息等),并且NameNode会定期将文件系统的命名空间元数据信息保存到fsimage文件中;以防止NameNode掉电或者进程崩溃;但是如果实时的将内存中的hdfs文件系统元数据信息保存同步到fsimage文件中,将会非常消耗资源且造成NameNode运行缓慢,所有NameNode会将命名空间的修改操作先保存在编辑日志editlogs中;然后定期合并fsimage和editlogs文件。
在NameNode元数据文件目录下,其存储的基本元数据文件如下:
(1)FSimage文件:HDFS文件系统元数据的一个永久性的检查点,其中包含HDFS文件系统的所有目录和文件inode的序列化信息(id、类型、目录、所属用户、用户权限、时间戳……)。
(2)Edits文件:存放HDFS文件系统的所有更新操作的路径,文件系统客户端执行的所有写操作首先会被记录到edits文件中。
(3)seen_txid文件保存的是一个数字,保存最后一个edits_的编辑transactionid数字
(4)每次Namenode启动的时候都会将fsimage文件读入内存,并从00001开始到seen_txid中记录的数字依次执行每个edits里面的更新操作,保证内存中的元数据信息是最新的、同步的,可以看成Namenode启动的时候就将fsimage和edits文件进行了合并。
在Hadoop-2.X的源码中;其对应的实现类为:FSImage;其主要的作用为:
1、保存名字空间:将当前时刻NameNode内存中的hdfs文件系统元数据信息持久化保存到fsimage文件中;
2、加载fsimage文件:用于将持久化的fsimage文件读取并将其内的文件系统元数据信息加载到NameNode的内存空间中;
3、加载editlog文件:NameNode加载了fsimage文件后;其内只拥有ckp检查点时刻的hdfs文件系统空间镜像;对后续命名空间的操作修改是记录在editlog文件当中;所有还需要加载editlog文件来恢复至最终hdfs文件系统的状态;
1、