hdfs之checkpoint

前提说明:研究的hadoop版本1.0.3

checkpoint的触发条件:

  1. 默认1小时进行一次merge;
  2. edits的文件大小超过大致64M

以上两个条件,满足任意一个即可,每隔5分钟进行一次条件检查。

 

checkpoit流程:

  1. SNN(secondary namenode)服务器上检查fs.checkpoint.dir  fs.checkpoint.edits.dir配置的文件路径,如果不存在则创建
  2. SNN服务器上修改current文件夹名称为: lastcheckpoint.tmp,并且重新创建一个空的current文件夹
  3. 通过http请求调用NN(namenode)检查edits.new文件是否已经存在,如果已经存在则检查所有的存放edits文件的文件夹中是否均包含edits.new文件,如果有一个不包含则抛出:Inconsistent existence of edits.new异常,如果均包含,则会输出warn级别的日志,提示:Cannot roll edit log,edits.new files already exists in all healthy directories:并且return。如果不存在则停止edits文件的写入,创建一个临时的edits文件:edit.new,在merge过程中产生的edit log均记录在edit.new中
  4. 从node下载editsfimage文件
  5. Load fimage文件,全部加载到内存,解析完后转换成INode对象到目录树中,节点集合采用ArrayList类型,在集合中定位某个INode时采用CollectionsbinarySearch()方式实现
  6. Load edits文件,边读边merge(修改load fimage后的inode对象列表),edits文件的读取采用:DataInputStream类
  7. 持久化merge后的fimage文件,并创建空的edits文件
  8. 上传合并后的fimage文件到NN节点,取名:fsimage.ckpt,并放置到current目录中,删除fsimage文件,并更名fsimage.ckptfsimage文件,修改edits.newedits
  9. 修改lastcheckpoint.tmp目录为previous.checkpoint(存放上次checkpoint的数据)

 

  顺便说三句:

  1. NameNode启动时先执行edits文件的merge,如果有edits.new则也会执行merge,确保能还原到最新的元数据
  2. 线上服务器merge一个6.4G的edits文件(fimage文件40M),共耗时28分钟
  3. 单独启动SNN的命令:hadoop-daemon.sh start secondarynamenode。

猜你喜欢

转载自wangneng-168.iteye.com/blog/2035722