一、名称节点(NameNode)
1.什么是名称节点
在HDFS中,名称节点负责管理分布式文件系统的命名空间(Namespace),保存了两个核心的数据结构-FsImage和EditLog。
- FsImage:用于维护文件系统树以及文件树中所有的文件和文件夹的元数据。
- EditLog:中记录所有针对文件创建、删除、重命名等操作的日志文件。
名称节点记录了每个文件中各个块所在的数据节点的位置信息,但并不持久化存储这些信息,而是在系统每次启动时扫描所有数据节点重构得到这些信息。
2.名称节点工作过程
名称节点启动时,会将FsImage的内容加载到内存当中,然后执行EditLog文件中的各项操作,使得内存中的元数据保存最新。这个操作完成后,就会创建一个新的FsImage文件和一个空的EditLog文件。名称节点启动成功并进入正常运行状态以后,HDFS中的更新操作都会被写入到EditLog,而不是直接写入FsImage(文件大,直接写入系统会变慢)。
名称节点在启动的过程中处于“安全模式”,只能对外提供读操作。启动结束后,则进入正常运行状态,对外提供读写操作。
二、第二名称节点(Secondary NameNode)
1.功能
在名称节点运行期间,EditLog文件由于操作不断发生会逐渐变大,为解决逐渐变大带来的问题,故采用了第二名称节点。
- 可以完成EditLog与FsImage的合并操作,减少EditLog文件大小,缩短名称节点重启时间
- 作为名称节点的“检查点”,保存名称节点中的元数据信息。
2.工作过程
- SecondaryNameNode会定期和NameNode通信,请求其停止使用EditLog文件,暂时将新的写操作写到一个新的文件edit.new上来,这个操作是瞬间完成,上层写日志的函数完全感觉不到差别。
- SecondaryNameNode通过HTTP GET方式从NameNode上获取到FsImage和EditLog文件,并下载到本地的相应目录下。
- SecondaryNameNode将下载下来的FsImage载入到内存,然后一条一条地执行EditLog文件中的各项更新操作,使得内存中的FsImage保持最新;这个过程就是EditLog和FsImage文件合并。
- SecondaryNameNode执行完(3)操作之后,会通过post方式将新的FsImage文件发送到NameNode节点。
- NameNode将从SecondaryNameNode接收到的新的FsImage替换旧的FsImage文件,同时将edit.new替换EditLog文件,通过这个过程EditLog就变小了。
HDFS设计中,并不支持把系统直接切换到第二名称节点,从这角度,第二名称节点只是起到名称节点“检查点”的作用,并不能起到“热备份”作用。即使有了第二名称节点的存在,当名称节点发生故障时,系统还是有可能会丢失部分元数据信息。
Reference:
dblab.xmu.edu.cn
学习交流,有任何问题还请随时评论指出交流。