NameNode启动中image文件处理流程

时间:2024-03-23 10:10:13

NameNode时与image文件相关的大概有下面三步操作:

第一步 加载image

NameNode启动后时首先加载硬盘上的fsimage文件(保持了整个命名空间)和edits文件(保持了命名空间的操作日志),在内存中merge后将新的fsimage写到磁盘上,即做一次checkpoint。

其中加载过程如图1所示:

NameNode启动中image文件处理流程

图1 加载image文件流程

通常NameNode配置两个目录来存放fsimage&edits文件,分布是本地磁盘和NFS,防止NameNode所在机器磁盘坏掉后数据丢失。

每个目录下都保持了一个fstime文件,里面记录了最近一次checkpoint时间。NameNode启动时根据checkpoint时间加载最新的一份数据。

edits.new是个临时文件,只有SecondaryNameNode正在做checkpoint的时候存在。

第二步 保存image

NameNode加载完fsimage&edits文件后,会将merge后的结果写到磁盘上。写的过程会对本地磁盘和NFS 依次 做图2所示的操作。

NameNode启动中image文件处理流程

图2 保存image文件流程

这一步做完后,磁盘上有一份原始的fsimage文件,一份最新checkpoint文件:fsimage.ckpt,另外edits&edits.new为空文件(4个字节)。

第三步 滚动image文件

写完checkpoint后,NameNode会对磁盘上的文件做一次滚动(重命名),如图3所示:

NameNode启动中image文件处理流程

图3 滚动image文件流程

该步骤将fsimage.ckpt重命名为fsimage(覆盖原有fsimage文件),edits.new重命名为edits(覆盖原有edits文件),并将最新时间戳写入fstime文件。