理解这两个概念,对于理解Hadoop是如何管理备份,Secondary Namenode、Checkpoint Namenode和Backup Node如何工作的很重要。
- fsimage: 文件是文件系统元数据的一个永久性检查点,包含文件系统中的所有目录和文件idnode的序列化信息。
- edits: 文件系统的写操作首先把它记录在edit中
将文件系统个元数据操作分开操作,是为了提升内存的处理效率。如果不分开处理,即所有的写操作均记录在一个文件中,比 如,fsimage中,那么每个操作都会对这个文件进行修改,因为这个文件可能会很大,所以每次进行写操作的时候就会很慢,随着fsimage越来越大, 速度便会越来越低。
Hadoop的解决方案是辅助Namenode节点,文件系统的写操作不是直接被修改到fsimage中,二是edits中,辅助Namenode 节点负责将两者在自己的内存中整合然后进行相应的替换操作,这样会频繁的对edits进行修改而不是fsimage,而edits文件的大小是可以接受 的,而且大小也不会不断增加。具体的checkpoint执行过程如下:
以下即是checkpoint过程:
- 辅助Namenode请求主Namenode停止使用edits文件,暂时将新的写操作记录到一个新文件中,如edits.new。
- 辅助Namenode节点从主Namenode节点获取fsimage和edits文件(采用HTTP GET)
- 辅助Namenode将fsimage文件载入到内存,逐一执行edits文件中的操作,创建新的fsimage文件
- 辅助Namenode将新的fsimage文件发送回主Namenode(使用HTTP POST)
- 主Namenode节点将从辅助Namenode节点接收的fsimage文件替换旧的fsimage文件,用步骤1产生的edits.new文件替换旧的edits文件(即改名)。同时更新fstime文件来记录检查点执行的时间
注:从Hadoop0.21.0开始,辅助Namenode已经放弃不用,由checkpoint节点取而代之,功能不变。新版本同时引入一种新的Namenode,名为BackupNode。