欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

深度剖析SecondaryNameNode运行机制

程序员文章站 2024-02-29 23:26:34
...

深度剖析SecondaryNameNode运行机制
1. Secondarynamenode工作过程

SecondaryNameNode备份由三个参数控制fs.checkpoint.period控制周期(以秒为单位,默认3600秒),fs.checkpoint.size控制日志文件超过多少大小时合并(以字节为单位,默认64M), dfs.http.address表示http地址,这个参数在SecondaryNameNode为单独节点时需要设置。

SecondaryNameNode通知NameNode准备提交edits文件,此时主节点将新的写操作数据记录到一个新的文件edits.new中。
SecondaryNameNode通过HTTP GET方式获取NameNode的fsimage与edits文件(在SecondaryNameNode的current同级目录下可见到 temp.check-point或者previous-checkpoint目录,这些目录中存储着从namenode拷贝来的镜像文件)。
SecondaryNameNode开始合并获取的上述两个文件,产生一个新的fsimage文件fsimage.ckpt。
SecondaryNameNode用HTTP POST方式发送fsimage.ckpt至NameNode。
NameNode将fsimage.ckpt与edits.new文件分别重命名为fsimage与edits,然后更新fstime,整个checkpoint过程到此结束。
深度剖析SecondaryNameNode运行机制
NameNode将对文件系统的改动追加保存到本地文件系统上的一个日志文件(edits)。当一个NameNode启动时,它首先从一个映像文件(fsimage)中读取HDFS的状态,接着应用日志文件中的edits操作。然后它将新的HDFS状态写入(fsimage)中,并使用一个空的 edits文件开始正常操作。因为NameNode只有在启动阶段才合并fsimage和edits,所以一段时间后日志文件可能会变得非常庞大,特别是对大型的集群。日志文件太大的另一个副作用是下一次NameNode启动会花很长时间。
2.secondarynameNode如何辅助管理FSImage与Edits文件

  • 由于editlog记录了集群运行期间所有对HDFS的相关操作,所以这个文件会很大。
  • 集群关闭后再次启动时会将Fsimage,editlog加载到内存中,进行合并,恢复到集群的。
  • 由于editlog文件很大所有,集群再次启动时会花费较长时间。
  • 为了加快集群的启动时间,所以使用secondarynameNode辅助NameNode合并Fsimage,editlog。
    上图详细工作流程:
    1、 secnonaryNN通知NameNode切换editlog
    2、secondaryNN从NameNode中获得FSImage和editlog(通过http方式)
    3、secondaryNN将FSImage载入内存,然后开始合并editlog,合并之后成为新的fsimage
    4、secondaryNN将新的fsimage发回给NameNode
    5、NameNode用新的fsimage替换旧的fsimage
    完成合并的是secondarynamenode,会请求namenode停止使用edits,暂时将新写操作放入一个新的文件中(edits.new)。secondarynamenode从namenode中通过http get获得edits,因为要和fsimage合并,所以也是通过http get 的方式把fsimage加载到内存,然后逐一执行具体对文件系统的操作,与fsimage合并,生成新的fsimage,然后把fsimage发送给namenode,通过http post的方式。namenode从secondarynamenode获得了fsimage后会把原有的fsimage替换为新的fsimage,把edits.new变成edits。
    Hadoop进入安全模式时需要管理员使用dfsadmin的save namespace来创建新的检查点。
    secondarynamenode在合并edits和fsimage时需要消耗的内存和namenode差不多,所以一般把namenode和secondarynamenode放在不同的机器上。
    fsimage与edits的合并时机取决于两个参数,第一个参数是默认1小时fsimage与edits合并一次。
    3.secondarynamenode合并edits和fsimage的时机:
  • 第一个参数:时间达到一个小时fsimage与edits就会进行合并
dfs.namenode.checkpoint.period :3600
  • 第二个参数:hdfs操作达到1000000次也会进行合并
dfs.namenode.checkpoint.txns	:1000000
  • 还有一个参数是每隔多长时间检查一次hdfs的操作次数
dfs.namenode.checkpoint.check.period	:60