NameNode和Secondary NN的工作机制,FsImage与Edits的相关说明

下面来介绍一下hadoop中两个存储数据的组件NameNode和Secondary NameNode,分别简称为NN与2NN。

首先思考一个问题,数据存储在内存和磁盘上优缺点是什么?
        优点:在内存上读写速度快,在磁盘上,关机不丢失

        缺点:在内存上掉电丢失,可靠性差,在磁盘上,关机也不丢失数据,但是读写数据慢

        有没有一种方法即能做到读写速度快又能关机不丢失数据呢?

        hadoop的设计者聪明的想出来将存储数据分为两部分,一个是FsImage(元数据镜像文件),一个是Edits(追加操作日志)。

        第一次启动NameNode格式化后,创建Fsimage和Edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。用户进行操作,会先将操作描述写进edits磁盘文件中,然后将新写入的部分加载到内存中,如果是先进行将操作描述写入内存中,这时候掉电的话那么就会丢失数据。系统会根据这个操作也是直接加载到FsImage内存,到合并的时候才去根据这些操作写入fsimage磁盘中。

        2NN作用:对FsImage和Edits进行合并。如果Edits文件量过大或者定时对两个文件开始合并操作,先将FsImage和Edits分别拷贝一份,在NN中生成一份新的Edits2文件也就是在合并过程中出现的用户操作写入Edits2文件中,2NN对拷贝的两份FsImage和Edits文件加载到内存中并合并生成新的Fsimage文件,这时候2NN会告诉NN,我合并好了,NN会将这份新的Fsimage文件替换旧的Fsiamge文件。

下面是详细说明:

1)第一阶段:NameNode启动

(1)第一次启动NameNode格式化后,创建Fsimage和Edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。

(2)客户端对元数据进行增删改的请求。

(3)NameNode记录操作日志,更新滚动日志。

(4)NameNode在内存中对元数据进行增删改。

2)第二阶段:Secondary NameNode工作

(1)Secondary NameNode询问NameNode是否需要CheckPoint。直接带回NameNode是否检查结果。

(2)Secondary NameNode请求执行CheckPoint。

(3)NameNode滚动正在写的Edits日志。

(4)将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode。

(5)Secondary NameNode加载编辑日志和镜像文件到内存,并合并。

(6)生成新的镜像文件fsimage.chkpoint。

(7)拷贝fsimage.chkpoint到NameNode。

(8)NameNode将fsimage.chkpoint重新命名成fsimage。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值