初识分布式Hadoop的SecondaryNamenode

学习了很久仍然对Hadoop里面的一些机制非常的陌生,很多都知其名而不知其意。我们深知这些框架系都是出自外国,命名什么的都是出自外国的创作者,他们所表达的跟我们所领会的有可能是完全不一样的。其中,Hadoop里的SecondaryNamenode就是一个很容易因名字而误解它的节点概念了。

那么,SecondaryNamenode是什么?从名字上看,它似乎是第二个Namenode喔,那它是不是Namenode的备用节点呢?是的,我在之前也是这么认为它是Namenode的备份,可今天看了些资料研究了一番,它并是一个Namenode的备用节点。详细的介绍一下。

 

NameNode

namenode主要是保存hdfs的元数据,比如命名空间、块信息。在运行期间,这些信息加载在内存里运行的,不过也可以将他们保存到本地磁盘空间里。

展示了NameNode是怎么把保存元数据到磁盘空间里。

  1. 其中,fsimage文件是namenode的快照文件
  2. edit logs是一个记录文件系统改动数据信息的文件

在只有namenode重启的时候,edit logs和fsimage两个文件才会进行合并从而组成一个最新的快照。可是,我们都知道,作为正常运作的服务机器又怎么能经常进行重启操作呢,就是因为这样,集群运作的时间很长,namenode的edit logs储存的数据量十分大,这样就会引发很多问题:

  1. 数据量十分大,数据文件的管理则会十分难(假设你手机的内存空间就只有那么一丁点,时刻都进行着数据储存会有什么后果咧)
  2. 当我们的机器需要维修了重启集群,namenode的启动将会十分缓慢,因为edit logs的数据量很大,与fsimage进行合并会相当耗时。
  3. 还有就是突然挂掉了,运行在内存的数据没有及时保存磁盘里就导致数据丢失的后果。

以上就是需要解决的问题,问题也十分的明确。解决问题的方向就是要解决edit logs文件过大的问题,还有就是及时得到一个最新的namenode快照,避免节点挂掉导致数据丢失。

 

SecondaryNamenode

说了这么多,以上的问题和SecondaryNamenode有着什么样的关系呢?既然说出来了,那肯定就是为了解决以上的问题的,那么,它的确是这样一回事的。它的职责是及时将edit logs里的数据合并到fsimage文件。那么,什么才叫及时呢?那就是按照我们给它配置的周期。

展示了SecondaryNamenode大概的工作原理。

  1. 1. SecondaryNamenode定时获取Namenode的edit logs文件,并合并到自身的fsimage
  2. 2. 有了新的fsimage文件后,将其copy到Namenode里
  3. 3. 宕机了或者重启了可以减少namenode的耗时

看到了这里,恍然发现了什么?还是天真的以为SecondaryNamenode是Namendoe的备用节点嘛?从大概的工作原理可以看出,它更所的是一个检查节点,帮助Nanenode及时合并edit logs里的数据。

补充一个点,也是我所疑惑的:nanenode什么时候保存数据信息到edit logs里的?

整个过程,是由datanode所触发的,datanode数据节点在对本节点的数据进行改写了后就会与namenode进行通信,告诉namenode节点它改了什么数据,改了哪里,此后namenode将这些元数据信息写入到edit logs文件里。

SecondaryNamenode的作用

  1. 1. 备份镜像
  2. 2. 日志与镜像定期合并

 

SecondaryNamenode工作原理

  1. 1. SecondaryNamenode通知Namenode提交edit logs文件,此时产生一个edit.new
  2. 2. SecondaryNameNode通过http get方式获取NameNode的fsimage与edits文件(在SecondaryNameNode的current同级目录下可见到 temp.check-point或者previous-checkpoint目录,这些目录中存储着从namenode拷贝来的镜像文件)
  3. 3. SecondaryNameNode开始合并获取的上述两个文件,产生一个新的fsimage文件fsimage.ckpt
  4. 4. SecondaryNameNode用http post方式发送fsimage.ckpt至NameNode
  5. 5. NameNode将fsimage.ckpt与edits.new文件分别重命名为fsimage与edits,然后更新fstime,整个checkpoint过程到此结束。 在新版本的hadoop中(hadoop0.21.0),SecondaryNameNode两个作用被两个节点替换, checkpoint node与backup node. SecondaryNameNode备份由三个参数控制fs.checkpoint.period控制周期,fs.checkpoint.size控制日志文件超过多少大小时合并, dfs.http.address表示http地址,这个参数在SecondaryNameNode为单独节点时需要设置。

 

SecondaryNamenode配置文件

core-site.xml:这里有2个参数可配置,但一般来说我们不做修改。fs.checkpoint.period表示多长时间记录一次hdfs的镜像。默认是1小时。fs.checkpoint.size表示一次记录多大的size,默认64M。

<property><name>fs.checkpoint.period</name>
<value>3600</value>

<description>The number of seconds between two periodic checkpoints.

</description>

</property>

 

<property>

<name>fs.checkpoint.size</name>

<value>67108864</value>

<description>The size of the current edit log (in bytes) that triggers

a periodic checkpoint even if the fs.checkpoint.period hasn’t expired.

</description>

</property>

镜像备份的周期时间是可以修改的,如果不想一个小时备份一次,可以改的时间短点。core-site.xml中的fs.checkpoint.period值

点赞

发表评论

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像

Title - Artist
0:00