NameNode和SecondaryNameNode的关系

问题引入

DataNode的元数据是储存在那里的?

首先我们假设数据是存放在磁盘中的,但是hadoop肯定是要频繁进行随机的访问,和处理客户端发过来的请求等等,如果存放在磁盘读取存放效率肯定极低,所以肯定不可能只存放在磁盘中的,这个时候我们想元数据储存在内存中,这样效率肯定就高了啊,没错如果储存在内存里,那么进行数据访问时肯定会比较快,但是如果这个时候不小心发生了断电,那么内存中的数据不就丢失了吗?整个数据肯定没办法正常工作了,所以产生在磁盘中备份元数据的FsImage

但是如果是这样,内存更新元数据的同时还需要同步磁盘,这样其实效率依然不高,但如果发生意外那么数据会面临出错的风险,因此,引入Edits文件(只进行追加操作,效率很高)。每当元数据有更新或者添加元数据时,修改内存中的元数据并追加到Edits中。这样即使断电也就让edits文件和fslmage文件同步组合成元数据,这样就可以解决这个问题。

但是问题依旧严重因为如果我们一直向edits中写入数据,那么edits文件就会变得极其臃肿,如果一但断电,结合成元数据的时间会变得极其绵长,随着使用的增加越开越慢,这样肯定是不行的,那么我们就想到,我们把这份时间切开,比如如果数据达到1g,或者时间过去一个小时,我就执行一次更新,这样不就好了吗,没错这样就可以解决这个问题,但是我们把这个工作交给namenode去做的话,那么namenode的效率就会下降,为了解决这个问题SecondaryNameNode诞生了,专门用来处理合并fslmage和edits文件

工作机制

 (尚硅谷我的神)

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。

在每次NameNode启动之后都会同步一次,保证在集群启动时所有数据都是最新,且同步的。

所以其实NN和SNN的关系就是老板与秘书的关系,SNN辅助NN工作缓解NN的压力,也更好的保证了数据的完整性和快速性。

接下来介绍一下DataNode的工作机制

(1)一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。

(2)DataNode启动后向NameNode注册,通过后,周期性(6小时)的向NameNode上报所有的块信息。

(3)心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。

(4)集群运行中可以安全加入和退出一些机器。

DataNode就是一个勤勤恳恳的打工仔,负责储存汇报。

其中因为datanode是存储数据的节点,大数据一旦数据发生错误对公司来说是非常严重的事故,所以在datanode内部有一套自己保证数据完整性的方法

(1)当DataNode读取Block的时候,它会计算CheckSum。

(2)如果计算后的CheckSum,与Block创建时值不一样,说明Block已经损坏。

(3)Client读取其他DataNode上的Block。

(4)常见的校验算法crc(32),md5(128),sha1(160)

(5)DataNode在其文件创建后周期验证CheckSum。


以上内容参考尚硅谷

如有侵权联系删

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值