暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Standby Namenode之 Checkpoint解析

Hadoop技术学习 2018-10-16
1070

Standby Namenode(sbn)在进入standby状态后对FSNamesystem调用startStandbyServices(final Configuration conf),该方法会创建两个重要的对象:EditLogTailer 和 StandbyCheckpointer,前者负责从JournalNodes拉去edit log到sbn的内存,后者主要有三个功能:

  1. 对namespace进行checkpoint

  2. 清理陈旧的fsimage文件和edits文件(sbn并不会将拉取的edit log保存到磁盘,所以就不存在清理。active namenode(nn)将edit log写到本地和JournalNodes,所以就涉及到陈旧edits文件的清理),详细清理过程后续博客会继续分析。

  3. 上传新checkpoint出的fsimaeg文件到active namenode

       

StandbyCheckpointer内部维护一个CheckpointerThread线程,该线程负责周期性检查checkpoint条件是否满足,如果满足就进行checkpoint。

  • 检测周期(checkpointPeriod):1000*Math.min(dfs.namenode.checkpoint.period, dfs.namenode.checkpoint.check.period)秒

  • 条件1:最近一次合并到namespace的edit log的 txid 和最近一次做了checkpoint的txid的差值大于或者等于dfs.namenode.checkpoint.txns配置的数量(默认1000000)

  • 条件2:当前时间距离最近一次checkpoint的时间间隔大于或者等于dfs.namenode.checkpoint.period (默认3600秒)

        CheckpointerThread每隔checkpointPeriod 秒检查一次。优先检查条件1是否满足,如果满足就进行checkpoint,否则检查条件2,如果条件2满足就进行checkpoint,否则就等待下一个检查周期。一旦条件满足,就进入doCheckpoint()方法进行checkpoint,流程如下:

checkpoint过程本质就是将维护在内存中的namespace全量inode树导出到磁盘保存为fsimage_txid文件,并生成fsimage_txid文件的md5保存到fsimage_txid.md5文件。考虑到磁盘故障等问题,sbn 和 nn都可以配置多个目录保存fsimage文件和edits文件【通常建议将fsimsge和edits分开保存到不同磁盘,这样可以缓解磁盘压力,毕竟运行中的nn会频繁刷editlog到磁盘,checkpoint也会写大文件到磁盘】,所以就需要将fsimage导出到多个目录。导出过程由FSImageSaver完成,FSImageSaver实现了Runnable接口,内部根据Protocol Buffer定义好的fsimage的数据格式和压缩格式将namespace写入fsimage_txid.ckpt文件,写入完成后再将此文件重名字为fsimage_txid文件,并生成文件的md5码保存到fsimage_txid.md5文件。对应于每个保存目录都会创建一个线程和一个FSImageSaver对象,多个目录并行导出。


待新的fsimage文件生成之后,sbn会将磁盘上保留的陈旧的fsimage文件清理掉。历史fsimage文件通常只会在元数据损坏的时候被用来做恢复用,适当保留几份就够了,太多了不仅没用反而浪费磁盘空间。有关清理过程,后续会分析。


 最后一步,sbn将新的fsimage文件上传给nn,这也是sbn除ha外的另一个存在意义。为了在文件传输过程中也能快速完成transition to active(HDFS-4816),StandbyCheckpointer会单独启动一个线程,在其内部由TransferFsImage用http协议(nn 用jetty维护了一个ImageServlet 用于 fsimage文件的上传、下载)完成fsimage传输。

        涉及到的几个重要参数:

参数名称 说明 默认值
dfs.namenode.checkpoint.periodcheckpoint的时间间隔3600(秒)
dfs.namenode.checkpoint.check.period检查周期60(秒)
dfs.namenode.checkpoint.txns两次checkpoint间的txid数量,超过该值就应该checkpoint1000000
dfs.image.compress是否压缩生成的fsimage文件false
dfs.image.compression.codec压缩格式org.apache.hadoop.io.compress.DefaultCodec


前三个参数关系到checkpoint的频率,如果过于频繁会导致频繁上传fsimaeg文件、频繁写磁盘,给nn造成压力,影响正常服务。如果平率太低,则会导致过多事务得不到持久化,最终nn重启时间延长,snn也就失去了意义。




#大数据和云计算机技术社区#博客精选(2017)

NoSQL 还是 SQL ?这一篇讲清楚

阿里的OceanBase解密

#大数据和云计算技术#: "四有"社区介绍

大数据和云计算技术周报(第56期)

新数仓系列:Hbase周边生态梳理(1)

《大数据架构详解》第2次修订说明

简单梳理跨数据中心数据库

云观察系列:漫谈运营商公有云发展史

云观察系列:百度云的一波三折

云观察系列:阿里云战略观察

超融合方案分析系列(7)思科超融合方案分析


加入技术讨论群




《大数据和云计算技术》社区群人数已经3000+,欢迎大家加下面助手微信,拉大家进群,自由交流。


喜欢QQ群的,可以扫描下面二维码:

欢迎大家通过二维码打赏支持技术社区(英雄请留名,社区感谢您,打赏次数超过108+):


文章转载自Hadoop技术学习,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论