NameNode时与image文件相关的大概有下面三步操作:
第一步 加载image
NameNode启动后时首先加载硬盘上的fsimage文件(保持了整个命名空间)和edits文件(保持了命名空间的操作日志),在内存中merge后将新的fsimage写到磁盘上,即做一次checkpoint。
其中加载过程如图1所示:
图1 加载image文件流程
通常NameNode配置两个目录来存放fsimage&edits文件,分布是本地磁盘和NFS,防止NameNode所在机器磁盘坏掉后数据丢失。
每个目录下都保持了一个fstime文件,里面记录了最近一次checkpoint时间。NameNode启动时根据checkpoint时间加载最新的一份数据。
edits.new是个临时文件,只有SecondaryNameNode正在做checkpoint的时候存在。
第二步 保存image
NameNode加载完fsimage&edits文件后,会将merge后的结果写到磁盘上。写的过程会对本地磁盘和NFS 依次 做图2所示的操作。
图2 保存image文件流程
这一步做完后,磁盘上有一份原始的fsimage文件,一份最新checkpoint文件:fsimage.ckpt,另外edits&edits.new为空文件(4个字节)。
第三步 滚动image文件
写完checkpoint后,NameNode会对磁盘上的文件做一次滚动(重命名),如图3所示:
图3 滚动image文件流程
该步骤将fsimage.ckpt重命名为fsimage(覆盖原有fsimage文件),edits.new重命名为edits(覆盖原有edits文件),并将最新时间戳写入fstime文件。