HDFS热备方案:Standby源码分析

doCheckpoint分析
1、通过namenode协议rollEditLog(滚动日志,日志流量切换到edits.new,并且会记录fstime);
2、调用ingest类,消化所有日志到从节点内存;
3、从节点调用rollEditLog滚动日志;
4、保存命名空间到磁盘上(本地+nfs)saveNamespace;
5、putFSImage操作到主节点(primary本地+nfs);
6、通过namenode协议rollFsImage,滚动primary镜像;


putFSImage分析 
1、通过http先调用主节点GetImageServlet的分支putImage;
2、主节点通过http方式到从节点的current目录获取fsimage,写入到current的文件fsimage.ckpt;
3、校验获取到的fsimage.ckpt文件内容是否完整(是否由于网络有损坏);

rollFsImage分析
1、判断是否已经滚动过日志;
if (ckptState != CheckpointStates.UPLOAD_DONE) {
      throw new IOException("Cannot roll fsImage before rolling edits log.");
    }
2、判断edits.new文件是否存在;
if (!editLog.existsNew()) {
      throw new IOException("New Edits file does not exist");
    }
3、判断fsimage.ckpt文件是否存在;
4、重命名edits.new ->edits;(将之前的edits删除,将edits.new重命名,打开日志流)
5、将fsimage.ckpt重命名为fsimage;
6、清除image目录与edits目录下不属于2者的文件;
7、将版本写入到current版本文件;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值