解释Hadoop中NN的工作机制?

引入:当我们将数据上传到HDFS分布式系统进行存储时,通过NN存储HDFS系统中数据的元数据,DN存储真实数据
           那么,NN中的元数据存储在哪里?
假设:a.考虑数据安全性和可靠性,NN中元数据存储在节点的磁盘中。 
        --问题:访问效率很低( 因为修改元数据是在磁盘进行修改的~IO操作)
           b.考虑数据操作速率,将NN中元数据存储在内存中。        
        --问题:服务器宕机,停电等故障,导致元数据丢失(元数据丢失,整个集群无法工作)
问题:如何在实现高效操作元数据的情况下,还能实现内存+磁盘的维护方案?
        HDFS通过 备份fsimage(镜像文件) + edits(滚动编辑日志)的方案来解决问题
        --fsimage:NameNode内存中元数据序列化后形成的文件
        镜像文件:某个时刻对NN内存中元数据的一个快照. 镜像文件 <= NN内存中数据
        --Edits:记录client改元数据信息的每一步操作(可通过Edits运算出元数据)。
          Edits文件(只进行追加操作,效率很高),将对NN中元数据的操作,以日志记录的方式存入Edits文件
          a.Edits文件随着操作的增加会越来越大,需要定期进行FsImage和Edits的合并

          b.SecondaryNamenode(2NN)专门用于FsImage和Edits的合并.      

结论:磁盘和内存中均存

NN主要操作:
     --第一次启动NN格式化后,在/opt/module/hadoop-3.1.3/data/name/current下会创建fsimage和eidts文件,如果不是第一次启动,则直接加载镜像文件和滚动编辑日志文件到内存
     seen_txid:记录正在使用的编辑日志文件
     1) NN启动时,需要自己先将磁盘的fsimage_current + edits001_progress 文件进行一次合并. 在内存中构建好元数据信息
     2) 当对HDFS进行改操作, 首先会在edits001_progress(正在使用的编辑日志)记录对应的操作,然后对NN内存中的元数据进行相应的修改.
     3) 2NN会每隔1个小时或者当 edits001_progress中已经记录了100万次的操作后,开始进行fsimage_current 和edits001_progress的合并
     4) NN会将edits_progress进行所谓的滚动,说白了就是该文件不能再进行写入操作,会生成另外一个编辑日志文件用于记录后续的写操作.
      滚动正在使用的编辑日志: edits001_progress --> edits001
      新的编辑日志: edits002_progress 
     5) 2NN 将NN中的fsimage_current 和 edits001 拷贝过来。加载到内存中进行合并. 合并完成后会生成新的fsimage_new.
     6) 2NN 将fsimage_new 推送到NN中, fsiamge_current --> fsimage_old 会保留,fsimage_new -->fsiamge_current .相当于会保留一份新的fsimage 和一份旧的fsiamge.
     7) 总结: NN内存中的数据 = 磁盘上正在使用的fsimage + 正在使用的edits文件.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值