【Hadoop学习】Secondary NameNode解读

Secondary NameNode从它的名字上来看,给人的感受是NameNode的备份。但实际上不是这样。那到底Secondary NameNode在HDFS中扮演的是什么角色呢?node

从名字上来看Secondary NameNode与NameNode,都包含着NameNode,这二者是否是存在某种关系呢,先来看下NameNode是干什么的。微信

NameNode

NameNode主要是用来保存HDFS的元数据信息,好比命名空间信息,快信息等。当它运行的时候,这些信息会保存在内存中。同时这部分信息也会持久化到磁盘上。oop

  • fsimage:是在NameNode启动时对整个文件系统的快照
  • edits:在NameNode启动后,对文件系统改动序列

只有在NameNode重启时,edits才会合并到fsimage文件中,从而获得一个文件系统的最新快照。可是在产品集群中NameNode是不多重启的,这也意味着当NameNode运行了很长时间后,edits文件会变得很大。就会面临以下问题:网站

  1. edits文件会变的很大,怎么去管理这个文件是一个挑战
  2. NameNode的重启会花费很长时间,由于有不少edits中改动要合并到fsimage文件上。
  3. 若是NameNode挂掉了,就会丢失了不少改动,由于此时的fsimage文件很是旧。

这个时候Secondary NameNode就出场了,Secondary NameNode能够来帮助解决上面问题,它的职责就是用来合并NameNode的edits到fsimage中。spa

Secondary NameNode

HDFS文件系统的写操做不是直接被修改到fsimage中,而是edits中,Secondary NameNode节点负责将二者进行整合。日志

checkpoint过程以下:视频

  1. Secondary Namenode请求Namenode中止使用edits文件,暂时将新的写操做记录到一个新文件中,如edits.new。
  2. Secondary Namenode节点从Namenode节点获取fsimage和edits文件(采用HTTP GET)
  3. Secondary Namenode将fsimage文件载入到内存,逐一执行edits文件中的操做,建立新的fsimage文件
  4. Secondary Namenode将新的fsimage文件发送回Namenode(使用HTTP POST)
  5. Namenode节点将从Secondary Namenode节点接收的fsimage文件替换旧的fsimage文件,用步骤1产生的edits.new文件替换旧的edits文件(即更名)。同时更新fstime文件来记录检查点执行的时间
    注:从Hadoop0.21.0开始,辅助Namenode已经放弃不用,由checkpoint节点取而代之,功能不变。新版本同时引入一种新的Namenode,名为BackupNode。

Secondary NameNode的整个目的在HDFS中提供一个Checkpoint Node,它只是NameNode的一个助手节点进程

如今,咱们明白Secondary NameNode所作的是在文件系统这设置一个Checkpoint来帮助NameNode更好的工做;它不是取代NameNode,也不是NameNode的备份。内存

Secondary NameNode的检查点进程启动,是由两个配置参数控制的:产品

  • fs.checkpoint.period,指定连续两次检查点的最大时间间隔, 默认值是1小时。
  • fs.checkpoint.size定义了edits日志文件的最大值,一旦超过这个值会致使强制执行检查点(即便没到检查点的最大时间间隔)。默认值是64MB。

关于NameNode是何时将改动写到edit logs中的?
这个操做其实是由DataNode的写操做触发的,当咱们往DataNode写文件时,DataNode会跟NameNode通讯,告诉NameNode什么文件的第几个block放在它那里,NameNode这个时候会将这些元数据信息写到edit logs文件中。

 

了解更多详情请登陆超人学院网站http://www.crxy.cn?sxy或者关注超人学院微信号:CRXY-CN

或者观看超人学院免费公开课视频

https://ke.qq.com/course/53102#term_id=100145289

相关文章
相关标签/搜索