fsimage与editslog

fsimage与editslog

NameNode中的元数据是在内存中用ArrayList保存的,但是要考虑到如果电脑停电了突然关机了,那么NameNode中的元数据就被释放掉没有了,所以就有editslog,editslog包含了元数据还有一系列的操作。

如果要使用这些数据,在开机的时候就会加载editslog,恢复到关机之前的场景,因为我们处理的是大数据,里面有亿万级的操作,每次开机的时候很慢,所以就引出来了fsimage和editslog。
editslog里面保存的是操作与元数据,fsimage存放的是editslog在内存中加载后的数据的二进制。等关机之后再开机,它会先加载fsimage中的二进制信息,加载的过程是特别快的,中间没有操作,只有最终数据的加载。加载完fsimage呢还要再加载editslog,这是为什么呢?

举个栗子: 我要创建十个文件夹,但是在创建的过程中我把电脑关了,那么我fsimage中的数据就不是最新的了,因为有些文件夹没有创建完成,editslog中的数据才是最新的,所以我在开机的时候还要再加载editslog,执行我editslog中的操作,这样我才能保证我fsimage中的数据是最新的。
又回到最初的问题,我们处理的是大数据,可能会出现一些突发的情况,最常见的情况就是节点挂掉了。

紧接着出现了SecondaryNameNode,它的作用就是辅助NameNode来合并editslog和fsimage。它会定期的去NameNode拉取editslog与fsimage,然后将这两个东西放在SecondaryNameNode中合并起来。然后fsimage里存取的数据就是最新的数据了,然后再将SecondaryNameNode中的fsimage覆盖掉NameNode中的fsimage,这样开机的时候直接加载NameNode中的fsimage是很快的。

因为数据的大量,NameNode只有一个的话还是不够安全,还得再开一台NameNode,这台NameNode跟第一台的NameNode是保持数据同步的,只是第一台NameNode是Active,而第二台NameNode是Standby。当第一台NameNode挂掉了那么第二台NameNode立刻从Standby变为Active,接替挂掉的NameNode继续工作,整个过程是秒级别的。是为了让用户有更好的体验。
这个过程称之为 HA(High Availability)高可用

结合来看HA过程
HA过程

猜你喜欢

转载自blog.csdn.net/aaaaajiboke/article/details/82761567
今日推荐