写在前面
本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!
本专栏目录结构和文献引用请见1000个问题搞定大数据技术体系
解答
NameNode
在上一讲中,我们阐述了HDFS体系架构是怎样的——图文详解HDFS体系架构
我们提到:NameNode 负责管理文件系统的命名空间,维护文件系统的文件树及所有的文件和目录的元数据。
NameNode 是如何管理分布式文件系统的命名空间呢?
其实,在 NameNode 内部是以元数据的形式,维护着两个文件,分别是 FSImage 镜像文件和 EditLog 日志文件。
其中, FSImage 镜像文件用于存储整个文件系统命名空间的信息, EditLog 日志文件用于持久化记录文件系统元数据发生的变化。
问题
当 NameNode 启动的时候, FSImage 镜像文件就会被加载到内存中,然后对内存里的数据执行记录的操作,以确保内存所保留的数据处于最新的状态,这样就加快了元数据的读取和更新操作。
随着集群运行时间长, NameNode 中存储的元数据信息越来越多,这样就会导致 EditLog 日志文件越来越大。
当集群重启时, NameNode 需要恢复元数据信息,首先加载上次的 FSImage 镜像文件,然后在重复 EditLog 日志文件的操作记录,一旦 EditLog 日志文件很大, 在合并的过程中就会花费很长时间,而且如果 NameNode 宕机就会丢失数据。
解决方案
为了解决这个问题,HDFS中提供了 SecondaryNameNode(辅助名称节点),它并不是要取代 NameNode 也不是 NameNode 的备份,
它的职责主要是周期性地把 NameNode 中的 EditLog 日志文件合并到 FSImage 镜像文件中,从而减小 EditLog 日志文件的大小,缩短集群重启时间,并且保证了HDFS系统的完整性。