当前位置: 首页 > news >正文

【大数据之Hadoop】六、HDFS之NameNode、Secondary NameNode和DataNode的内部工作原理

NN和2NN的内部工作原理

对于NameNode的存放位置:
内存中:好处:计算快
坏处:可靠性差,断电后元数据会丢失
磁盘中:好处:可靠性搞
坏处:计算慢
内存+磁盘中:效率低

所以设置在磁盘中的备份元数据的镜像文件FsImage(只存储数据),但元数据更新时需要同时更新FsImage,否则会产生数据一致性的问题,且断电后元数据会丢失。

引入Edits日志文件(只进行追加操作)。每当元数据有更新或者添加元数据时,修改内存中的元数据并追加到Edits中。一旦NameNode节点断电,通过FsImage和Edits的合并元数据。

引入一个新的节点SecondaryNamenode,专门用于定期合并FsImage和Edits。

综上,NameNode存放于内存中,FsImage和Edits存放与磁盘中,SecondaryNamenode定期合并FsImage和Edits,当开机时加载FsImage和Edits到NameNode。
在这里插入图片描述
1.第一阶段:NameNode启动
(1)第一次启动NameNode格式化后,创建Fsimage镜像文件和Edits日志文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。
(2)客户端对元数据进行增删改的请求。
(3)NameNode记录操作日志,更新滚动日志。(先记录日志再更改内存,如果先更改内存再记录,在更改内存后遇到断电,则不会记录此次更改的记录,导致内存丢失)
(4)NameNode在内存中对元数据进行增删改。

2.第二阶段:Secondary NameNode工作
(1)Secondary NameNode询问NameNode是否需要CheckPoint(触发条件,定时器到期;Edits日志文件数据满)。直接带回NameNode是否检查结果。
(2)Secondary NameNode请求执行CheckPoint。
(3)NameNode滚动正在写入Edits日志。
(4)将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode。
(5)Secondary NameNode加载编辑日志和镜像文件到内存,并合并。
(6)加载后Secondary NameNode生成新的镜像文件fsimage.chkpoint。
(7)Secondary NameNode拷贝fsimage.chkpoint到NameNode。
(8)NameNode将fsimage.chkpoint重新命名成fsimage。

DataNode工作机制

在这里插入图片描述
(1)DataNode主动向NameNode汇报自己的块信息。
(2)NameNode则记录下 有哪些块是正常的,并向DataNode发送注册成功。
(3)DataNode每隔一个周期(6h)向NameNode汇报所有块的信息,保证数据的可靠性。
(4)DataNode和NameNode有周期性(3s)的互通信息,确保DataNode还是活动状态。
(5)若一定的时间NameNode没有收到DataNode信息,则任务该节点不可用(即NameNode不允许客户端向DataNode读写数据)。

数据的完整性

Hadoop使用crc校验位进行数据一致性校验,先对原始数据进行crc计算,然后与传输过来的crc校验位比较是否一致。
在这里插入图片描述

http://www.lryc.cn/news/43791.html

相关文章:

  • 小黑子—Java从入门到入土过程:第四章
  • 数据库原理及应用(四)——SQL语句(2)SQL基础查询以及常见运算符
  • (算法基础)Floyd算法
  • SQL语法:浅析select之七大子句
  • 中国人民大学与加拿大女王大学金融硕士——去有光的地方,并成为自己的光
  • Python数据结构与算法篇(五)-- 二分查找与二分答案
  • 小游戏也要讲信用
  • 贪心算法11
  • 【并发编程】JUC并发编程(彻底搞懂JUC)
  • Compose 动画 (七) : 高可定制性的动画 Animatable
  • vue3组件传值
  • 小白开发微信小程序00--文章目录
  • 随手记录第九话 -- Java框架整合篇
  • 电影《铃芽之旅》观后感
  • Web自动化测试(二)(全网最给力自动化教程)
  • 【C语言经典例题!】逆序字符串
  • 21 - 二叉树(三)
  • 【A-Star算法】【学习笔记】【附GitHub一个示例代码】
  • 纽扣电池澳大利亚认证的更新要求
  • 零代码零距离,明道云开放日北京站圆满结束
  • 第五章Vue路由
  • Git常用指令
  • Java每日一练(20230329)
  • 【面试题】JS的一些优雅写法 reduce和map
  • 【蓝桥杯真题】包子凑数(裴蜀定理、动态规划、背包问题)
  • 一种免费将PDF转word的方式
  • MyBatis-面试题
  • jQuery一些问题和ajax操作
  • Pytorch构建自己的数据集
  • 信息论小课堂:纠错码(海明码在信息传输编码时,通过巧妙的信道编码保证有了错误能够自动纠错。)