在HDFS中,NameNode用来管理文件系统的命名空间,其将所有的文件和文件夹的元数据保存在一个文件系统树中,这些信息会在硬盘上保存为fsimage(命名空间镜像)和edits(修改日志)文件;其还保存了文件包含哪些数据块,分布在哪些数据节点上,但这些数据并不保存在硬盘上,而是在系统启动的时候从数据节点收集而来的。DataNode是文件系统中真正存储数据的地方,其周期性的向元数据节点回报期存储的数据块信息。
从元数据节点(Secondary NameNode)并不是NameNode的备用节点,它与NameNode有着不同的职责(二者的服务可以运行在一台机器上),其主要功能是周期性的将元数据节点的命名空间镜像文件和修改日志合并,以防止日志文件过大,合并后的命名空间镜像文件在从元数据节点中叶保存一份,以防元数据节点失效的时候用于恢复。
元数据节点使用日志记录元数据的修改,其工作主要包括:
l 当文件系统客户端(client)进行写操作时,首先把它记录在修改日志中(edit log)
l 元数据节点在内存中保存了文件系统的元数据信息,在记录了修改日志后,元数据节点则修改内存中的数据结构。
l 每次的写操作成功之前,修改日志都会同步(sync)到文件系统。
l 命名空间映像文件(fsimage)是内存中的元数据在硬盘上的checkpoint,它是一种序列化的格式,并不能够在硬盘上直接修改。
l 当元数据节点失败时,则最新checkpoint的元数据信息从fsimage加载到内存中,然后逐一重新执行修改日志中的操作。
从元数据节点用来帮助元数据节点将内存中的元数据信息checkpoint到硬盘上,checkpoint的过程如下图所示:
1. 从元数据节点通知元数据节点生成新的日志文件,以后的日志都写到新的日志文件中。
2. 从元数据节点用http get从元数据节点获得fsimage文件及旧的日志文件。
3. 从元数据节点将fsimage文件加载到内存中,并执行日志文件中的操作,然后生成新的fsimage文件。
4. 从元数据节点奖新的fsimage文件用http post传回元数据节点
5. 元数据节点可以将旧的fsimage文件及旧的日志文件,换为新的fsimage文件和新的日志文件,然后更新fstime文件,写入此次checkpoint的时间。
6. 这样元数据节点中的fsimage文件保存了最新的checkpoint的元数据信息,日志文件也重新开始,不会变的很大了,从而使得元数据节点启动时花费很少的时间进行日志的合并。