- 是一个小弟;是NameNode的冷备份;当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务。辅助NameNode,分担其工作量,SecondaryNameNode负责定时默认1小时,从namenode上获取fsimage和edits来进行合并,然后再发送给namenode。减少namenode的工作量。在紧急情况下,可辅助恢复NameNode。
热备份 | 冷备份 |
---|---|
b是a的热备份,如果a坏掉。那么b马上运行代替a的工作。 | b是a的冷备份,如果a坏掉。那么b不能马上代替a工作。但是b上存储a的一些信息,减少a坏掉之后的损失。 |
需要注意,SecondaryNameNode并不是NameNode的备份。所有HDFS文件的元信息都保存在NameNode的内存中。在NameNode启动时,它首先会加载fsimage到内存中,在系统运行期间,所有对NameNode的操作也都保存在了内存中,同时为了防止数据丢失,这些操作又会不断被持久化到本地edits文件中。Edits文件存在的目的是为了提高系统的操作效率,NameNode在更新内存中的元信息之前都会先将操作写入edits文件。在NameNode重启的过程中,edits会和fsimage合并到一起,但是合并的过程会影响到Hadoop重启的速度,SecondaryNameNode就是为了解决这个问题而诞生的。
SecondaryNameNode的角色就是定期的合并edits和fsimage文件,合并步骤:
(1) 合并之前告知NameNode把所有的操作写到新的edites文件并将其命名为edits.new。
(2) SecondaryNameNode从NameNode请求fsimage和edits文件
(3) SecondaryNameNode把fsimage和edits文件合并成新的fsimage文件
(4) NameNode从SecondaryNameNode获取合并好的新的fsimage并将旧的替换掉,并把edits用第一步创建的edits.new文件替换掉
(5) 更新fstime文件中的检查点