NameNode

NameNode主要是用来保存HDFS的元数据信息,比如命名空间信息,块信息等。当它运行的时候,这些信息是存在内存中的。但是这些信息也可以持久化到磁盘上。

namenode的管理主要由image和editlog完成。image是namenode元数据的镜像。editlog记录对元数据的修改,并时时flush到磁盘。因为如果直接flush到image,性能太低,可能你只改了一条数据却要flush整个image。

Secondary NameNode

SecondaryNameNode就是来帮助解决上述问题的,它的职责是合并NameNode的edit logs到fsimage文件中。

上面的图片展示了Secondary NameNode是怎么工作的。

首先,它定时到NameNode去获取edit logs,并更新到自己的fsimage上,一旦更新成功,将其拷贝回NameNode中。NameNode在下次重启时会使用这个新的fsimage文件,从而减少重启的时间。 Secondary NameNode的整个目的是在HDFS中提供一个检查点。它只是NameNode的一个助手节点。这也是它在社区内被认为是检查点节点的原因。