Hadoop学习笔记(九)
Checkpoint过程分析:
Checkpoint将内存中最新的元数据以文件形式存储到各个备份目录之下,同时清除备份目录下原有的fsimage和edits文件,这样可以定期的对Fsimage和edits文件合并,产生新的fsimage文件,减少NameNode重启时合并时间,又防止了edits的无限制增长。
Checkpoint的功能由Secondary NameNode,Checkpoint Node或者Backup Node来完成。
以Backup为例,整个Checkpoint由Backup Node发起并结束,其中通过RPC调用NameNode的部分接口。
第一步——
Backup Node通过RPC调用Namenode的startCheckpoint方法,完成以下任务:
(1)首先对Checkpoint验证,判断是否允许;
(2)决定BackupNode是否需要下载FSImage和edits
(3)决定BackupNode是否需要将FSimage和edits合并
(4)在所有Namenode的Edits备份目录下创建edits.new文件,关闭原有的文件输出流,创建指向edits.new的文件输出流,在Checkpoint的过程中,所有的日志记录都将写入edtis.new
(5)创建一个指向BackupNode的输出流,同时在Backup Node端创建journal spool用于接收Checkpoint期间发送过来的日志
简单的流程图:

第二步——
BackupNode 根据需要从 NameNode下载最新的fsimage和eidts文件。
在Name Node和 Backup Node之间文件的上传下载是通过http协议进行传输的,在NameNode和BackupNode各自启动了一个httpServer,传输时一方发起,另一方响应并执行相应的java servlet完成功能。
第三步——
BackupNode将最新的fsimage和Edits文件加载到内存合并。
对于 BackupNode,如果是第一次启动,内存中的NameSpace为空,需要加载fsimage和edits文件到内存合并。
如果是启动之后的Checkpoint,BackupNode的内存已经形成NameSpace,不需要再次加载。
第四步——
BackupNode将合并后的元数据保存到磁盘,创建空的edits。
第五步——
Backup Node 根据需要,通过http上传合并后的fsimage,Name Node接收后命名为fsimage.ckpt,依次保存到各个备份目录下。如果Name node上配置了备份目录,则需要上传。
第六步——
Backup Node RPC 调用 Name Node的endCheckpoint方法,Name Node将所有备份目录下的edits.new重命名为eidts,将FSImage.ckpt重命名为FSImage,并重新定向输出流到eidts.
第七步——
Backup Node 将journal spool的日志合并到内存,并销毁journal spool.
浙公网安备 33010602011771号