hadoop中hdfs的fsimage文件与edits文件的作用
首先,我们抛出fsimage和edits文件的功能描述。
Fsimage文件: HDFS文件系统元数据的一个永久性的检查点,其中包含HDFS文件系统的
所有目录和文件inode的序列化信息。
Edits文件:存放HDFS文件系统的所有更新操作的路径,文件系统客户端执行的所有写操
作首先会被记录到Edits文件中。
其次,我们详细描述fsimage文件和edits文件在NameNode中所扮演的角色。
当NameNode首次启动时:
-
格式化文件系统,方便生成fsimage镜像文件;
-
启动NameNode
-
读取fsimage文件,将文件内容加载进内存
-
等待DataNade注册与发送blockreport
- 启动DataNode:
- 向NameNode注册
- 发送block_report(block_report的全称为Full Block Report,即全量块汇报,它主要是讲DateNode中存储的所有block信息都汇报给NameNode)
- 检查fsimage中记录的块的数量和block report中的块的总数是否相同
4.当客户端对文件系统进行操作时(创建目录,上传文件,删除文件等):
- 此时内存中已经有文件系统改变的信息,但是磁盘中没有文件系统改变的信息,此时会将这些改变信息写入edits文件中,edits文件中存储的是文件系统的元数据发生变更的信息。
当第二次启动NameNode时:
- 此时直接读取fsimage 和edits 文件
- 将fsimage 和edits 文件合并成新的fsimage文件
- 创建新的edits文件,内容开始为空
- 启动DataNode
最后,我想问,读者是否对Secondary NameNode有所了解。当我们了解hdfs时通常只关注NameNode和DataNode,但却很少关注Secondary NameNode。
Secondary NameNode 负责合并 NameNode 的 edits文件到 fsimage 文件中
它的工作机制如下:
1.Secondary NameNode 询问 NameNode 是否进行checkpoint。
2.Secondary NameNode 请求执行 checkpoint;
3.NameNode将当前edits和fsimage拷贝到Secondary NameNode
4.Secondary NameNode将edits和fsimage加载到内存,并将两者合并
5.生成新的镜像文件fsimage.chkpoint
6.将fsimage.chkpoint拷贝到NameNode
7.NameNode负责将fsimage.chkpoint重新命名为fsimage
注意,如果NameNode中的元数据丢失的话,可以从Secondary NameNode恢复一部分元数据信息,但不能全部恢复。因为NameNode正在写的edits日志还没有拷贝到Secondary NameNode,这部分恢复不了了。