一:NameNode的元数据怎么存储比较合适?
假如存储在磁盘里,因为NameNode需要频繁的响应客户端请求进行读写,效率会比较低。假如存在内存里的话,
一旦断电那么元数据就全部丢失了。
因此有了FsImage,它是存在磁盘里的元数据备份文件。每当NameNode启动时,从FsImage里拿取元数据放在内存里。
这样的话读写是在内存里,高效,磁盘里也有备份,断电不会丢失。但是,每次元数据进行读写操作时,都要同时更新内存
里的元数据和磁盘里的元数据,才能保证数据统一完整,那么这样效率其实更低。
于是又出现了Edits文件,它也在磁盘上,但是它不会存储全部的元数据,每当元数据有变动时,修改内存中的元数据并追
加到Edits里,因为Edits只进行追加操作,所以效率高。然后定时的将Edits里的数据和FsImage进行合并(合并由2NN完成),
这就同时具有了高效和安全。
二:NN和2NN工作机制
原文:https://www.cnblogs.com/lihui001/p/12499316.html