NameNode的元数据一致性

​        hdfs是一个分布式的存储系统,主要成员就是NameNode,DataNode,SecondaryNameNode我们知道NameNode主要职责之一就是存储元数据,维护目录树的。因为对元数据的访问比较频繁,所以,我们的元数据是存储在内存中的。但是,一旦出现断点,元数据丢失,那么整个集群将会瘫痪。所有我们就会把元数据备份在磁盘中一份,一遍应对断点发生。NameNode的元数据在磁盘中的备份就是fsimage。

       然而,我们既然要备份就要保证数据的一致性,如果我们元数据一边在内存中更新,在一边同步到磁盘的话,这会导致效率过低。所以就有了edits.log预习日志文件,当元数据有更新或者追加操作时,就会修改内存中元数据,并且写入edits.log中。这样如果Namenode节点断点,我们可以通过合并fsimage和edits.log文件实现完整的元数据。我们的edits.log文件不易过大,如果太大,进行数据合并的时候就需要的时间很长。所以需要设置chickpoint来合并元数据。但是如果我们在NameNode中合并的话,会导致NameNode的工作效率变得很低。所以我们需要一个辅助,来完成这个工作,这时SecondaryNameNode就应运而生了,SecondaryNameNode专门用来做fsimage和edits.log文件的合并的。

NameNode的元数据一致性_第1张图片

你可能感兴趣的:(Hadoop)