关于HDFS中NameNode和Secondry的合并机制问题

一、FSImage和EditsLog是什么?

我们知道HDFS是一个分布式文件存储系统,文件分布式存储在多个DataNode节点上。一个文件存储在哪些DataNode节点的哪些位置的元数据信息(metadata)由NameNode节点来处理。随着存储文件的增多,NameNode上存储的信息也会越来越多。那么HDFS是如何及时更新这些metadata的呢?
  在HDFS中主要是通过两个组件FSImage和EditsLog来实现metadata的更新。在某次启动HDFS时,会从FSImage文件中读取当前HDFS文件的metadata,之后对HDFS的操作步骤都会记录到edit log文件中。
那么完整的metadata信息就应该由FSImage文件和edit log文件组成。fsimage中存储的信息就相当于整个hdfs在某一时刻的一个快照。
  FSImage文件和EditsLog文件可以通过ID来互相关联。

如果edit log文件越来越多、越来越大时,当重新启动hdfs时,由于需要加载fsimage后再把所有的edit log也加载进来,就会出现第一段中出现的问题了。怎么解决?HDFS会采用checkpoing机制定期将edit log合并到fsimage中生成新的fsimage。

二、Checkpoint机制:
 fsimage和edit log合并的过程如下图所示:
 在这里插入图片描述
  fsimage与editlog合并过程
  其实这个合并过程是一个很耗I/O与CPU的操作,并且在进行合并的过程中肯定也会有其他应用继续访问和修改hdfs文件。所以,这个过程一般不是在单一的NameNode节点上进行从。如果HDFS没有做HA的话,checkpoint由SecondNameNode进程(一般SecondNameNode单独起在另一台机器上)来进行。在HA模式下,checkpoint则由StandBy状态的NameNode来进行。
在这里插入图片描述  合并过程:
  1.SNN从NN中拉取edits和fsimage
  2.合并edits和fsimage文件,产生一个新的fsimage.ckpt
  3.发送给NN,并去掉后缀.ckpt(自身也会留存一份)
  4.当拉取走edits时,会创建一个edits.new,来存储合并这段时间的操作日志
  5.得到fsimage后,去掉edits.new的.new后缀,得到一个edits和一个fsimage

触发条件

Checkpoint 操作受两个参数控制,可以通过 core-site.xml 进行配置:
复制代码

<property>
  <name> dfs.namenode.checkpoint.period</name>
  <value>3600</value>
  <description>
    两次连续的 checkpoint 之间的时间间隔。默认 1 小时
  </description>
</property>
<property>
  <name>dfs.namenode.checkpoint.txns</name>
  <value>1000000</value>
  <description>最大的没有执行 checkpoint 事务的数量,满足将强制执行紧急 checkpoint,即使尚未达到检查点周期。默认设置为 100 万。
  </description>
</property>

三、 HA模式下的合并: 在HA模式下checkpoint过程由StandBy NameNode来进行,以下简称为SBNN,Active NameNode简称为ANN。   HA模式下的edit log文件会同时写入多个JournalNodes节点的dfs.journalnode.edits.dir路径下,JournalNodes的个数为大于1的奇数,类似于Zookeeper的节点数,当有不超过一半的JournalNodes出现故障时,仍然能保证集群的稳定运行。   SBNN会读取FSImage文件中的内容,并且每隔一段时间就会把ANN写入edit log中的记录读取出来,这样SBNN的NameNode进程中一直保持着hdfs文件系统的最新状况namespace。当达到checkpoint条件的某一个时,就会直接将该信息写入一个新的FSImage文件中,然后通过HTTP传输给ANN。   ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190328140043158.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NtYWxsSVBQaWc=,size_16,color_FFFFFF,t_70)   ha checkpoint   如上图所示,主要由4个步骤: 1. SBNN检查是否达到checkpoint条件:离上一次checkpoint操作是否已经有一个小时,或者HDFS已经进行了100万次操作。 2. SBNN检查达到checkpoint条件后,将该namespace以fsimage.ckpt_txid格式保存到SBNN的磁盘上,并且随之生成一个MD5文件。然后将该fsimage.ckpt_txid文件重命名为fsimage_txid。 3. 然后SBNN通过HTTP联系ANN。 4. ANN通过HTTP从SBNN获取最新的fsimage_txid文件并保存为fsimage.ckpt_txid,然后也生成一个MD5,将这个MD5与SBNN的MD5文件进行比较,确认ANN已经正确获取到了SBNN最新的fsimage文件。然后将fsimage.ckpt_txid文件重命名为fsimage_txit。   通过上面一系列的操作,SBNN上最新的FSImage文件就成功同步到了ANN上。

借鉴:
https://www.cnblogs.com/jifengblog/p/9307791.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值