NN和2NN工作机制
NameNode中的元数据是存储在哪里?
元数据存在镜像文件Fsimage和编辑日志Edist文件中。在Secondary NameNode节点中,会定期进行Fsimage和Edits的拷贝与合并,保证元数据的更新。
1.假设存储在NameNode节点的磁盘中,因为要经常进行随机访问和响应客户请求,看起来效率过低;那应该是在内存中;
2.假设只存放在内存中,一旦断电,元数据丢失,整个集群便无法工作;
3.因此应该是在存在磁盘中备份元数据的Fsimage中
;但当内存中的元数据更新时,如果同时更新Fsiamge,就会导致效率过低,但如果不更新,就会产生一致性问题,一旦NameNode节点断电,就会产生数据丢失;
4.所以还要引入Edits文件(只进行追加操作,效率高)
,每当元数据有更新或者添加元数据时,修改内存中的元数据并追加到Edits中。
这样,当NameNode节点断电时,可以通过Fsimage和Edits的合并,合成元数据。
5.但如果长时间添加数据到Edits种,会导致该文件数据过大,效率降低,一旦断电,恢复元数据需要的时间过长。
所以,需要定期进行Fsimage和Edits的合并
,如果此操作由NameNode节点完成,效率过低;所有,再次引入一个新的节点Secondary NameNode,专门用于Fsimage和E