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.

 

 

 

 

 

 

 

 

 

posted on 2012-08-30 10:48  melburg  阅读(169)  评论(0)    收藏  举报