NameNode和DataNode工作原理剖析

摘要:
1、 DataNode 1的工作原理˃数据节点存储数据的目录系统中数据块的位置不由NameNode维护,而是以块列表的形式存储在DataNode中。在安全模式下,每个DataNode将向NameNode发送最新的块列表信息。当NameNode知道足够多的块位置信息后,它可以有趣地运行文件系统。如果NameNode在超过10分钟30秒的时间内没有接收到DataNode的心跳,则该节点被视为不可用。如果在指定的超时市场中恢复了DataNode和NameNode之间的通信,则NameNode和DataNode仍将正常工作,这表明NameNode具有很强的容错能力。

            NameNode和DataNode工作原理剖析

                                     作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.DataNode的工作原理

1>.查看数据节点存储数据的目录

  系统中的数据块的位置并不是由NameNode维护的,而是以块列表的形式存储在DataNode中。在系统的正常操作期间,NameNode会在内存中保留所有块位置的映射信息。

  在安全模式下,各个DataNode会向NameNode发送最新的块列表信息,NameNode了解到足够多的块位置信息之后,即可搞笑运行文件系统。
  如下图所示,数据节点不仅仅存放了真实数据,它还保存了相应块的元数据信息哟。   一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据文件,元数据包括数据块的长度,块数据的校验和,以及时间戳。

NameNode和DataNode工作原理剖析第1张

2>.数据节点的工作机制

 NameNode和DataNode工作原理剖析第2张

  如上图所示,DataNode的工作原理大致如下:
    首先我们需要启动NameNode并进入安全模式:
      (1)NameNode启动时,首先会将镜像文件载入内存;
      (2)其次会加载编辑日志以执行编辑日志中的各种操作;
      (3)紧接着会保存检查点;
      (4)而后,NameNode开始监听DataNode的请求,这个过程期间,NameNode一直运行在安全模式,即HDFS文件系统对于客户端来说是只读的。

    其次我需要启动DataNode:  
      (1)DataNode启动后会向NameNode注册;
      (2)NameNode接收到DataNode的注册请求,验证VERSION信息成功后,会向DataNode响应注册成功;
      (3)当该DataNode通过注册信息后,以后会周期性的向NameNode上报当前数据节点所有的块信息,即以一个块列表的形式上报;
      (4)心跳周期(可以通过"dfs.heartbeat.interval"参数设置)默认是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。
      (5)如果NameNode超过10分钟30秒没有收到某个DataNode的心跳,则认为该节点不可用。
 
    最后集群退出安全模式:
      当满足最小副本条件,NameNode会在30秒后就退出安全模式。所谓最小副本条件指的是在整个文件系统中99.9%(如果想要修改该参数的默认值可以直接修改"dfs.namenode.safemode.threshold-pct"参数)的块满足最小副本级别(默认值:dfs.namenode.replication.min=1)。


  Q1:数据节点周期性上传当前节点的所有数据块列表的默认时间是多少呢?
    答:我查阅了官网,并没有找到有配置该参数的值,但网上很多博客都说是1小时,我也他们是从哪看到的呢?我在官网只找到了可以设置新增快上报时间的参数,即"dfs.blockreport.incremental.intervalMsec"


  Q2:DataNode挂掉后为什么NameNode不立即判断DataNode不可用呢?
    答:进程死亡还是网络故障都可以造成DataNode无法与NameNode进行通信,NameNode不会立即把该节点判断为死亡,要经过一段时间,这端时间我们称之为超时时长。如果在规定的超时市场DataNode恢复和NameNode之间的通信的话,NameNode和DataNode依旧和往常一下正常工作,这可以体现NameNode的抗容错性强。

  Q3:为什么说DataNode的超时时间是10分30秒呢?
    答:如果定义超时时间为TimeOut,则计算超时时间的公式为: TimeOut = 2 * dfs.namenode.heartbeat.recheck-interval(指的是一次决定检查过期数据节点的间隔。默认5分钟) + 10 * dfs.heartbeat.interval(心跳间隔,默认3秒钟),计算得到超时时间的值为"10分30秒"。因此,你可以修改这两个变量以达到修改超时时间的目的。

  Q4:上面是校验和?
    答:校验和的目的就是用来保证传输数据的过程中保证数据的完整性,常见的校验算法比如MD5(占用大小是128Bit),CRC(占用大小是32Bit),SHA1(占用大小是160Bit)等,

  Q5:HDFS采用的是那种校验算法呢?
    答:DataNode的数据传输默认使用CRC校验算法,NameNode的元数据信息采用的是MD5校验算法。但是我们要知道CRC相对MD5和SHA1校验算法的可靠性较差,因为CRC的校验算法算出的hash散列值重复性要比MD5和SHA1校验算法要高。但是校验算法越长需要付出的代价是会消耗更多的CPU资源。

二.Apache Hadoop集群扩容实战案例

  博主推荐阅读:
    https://www.cnblogs.com/yinzhengjie2020/p/12489223.html

三.Apache Hadoop集群缩容实战案例

  博主推荐阅读:
    https://www.cnblogs.com/yinzhengjie2020/p/12513530.html

免责声明:文章转载自《NameNode和DataNode工作原理剖析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇界面控件工具DevExpress WinForms v21.1JavaScript数据类型之数字类型下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Autofac 组件、服务、自动装配 《第二篇》

Autofac 组件、服务、自动装配 《第二篇》http://www.cnblogs.com/kissdodog/p/3611799.html 一、组件 创建出来的对象需要从组件中来获取,组件的创建有如下4种(延续第一篇的Demo,仅仅变动所贴出的代码)方式: 1、类型创建RegisterType AutoFac能够通过反射检查一个类型,选择一个合适的...

粒子群算法(1)----粒子群算法简单介绍

   一、粒子群算法的历史    粒子群算法源于复杂适应系统(Complex Adaptive System,CAS)。CAS理论于1994年正式提出,CAS中的成员称为主体。比方研究鸟群系统,每一个鸟在这个系统中就称为主体。主体有适应性,它能够与环境及其它的主体进行交流,而且依据交流的过程“学习”或“积累经验”改变自身结构与行为。整个系统的演变或进化包...

统计学习方法 李航---第9章 EM算法及其推广

第9章 EM算法及其推广 EM算法是一种迭代算法,用于含有隐变量(hidden variable)的概率模型参数的极大似然估计,或极大后验概率估计。EM算法的每次迭代由两步组成:E步,求期望(expectation);M步,求极大( maximization ),所以这一算法称为期望极大算法(expectation maximizationalgorith...

ICP算法使用遇到的问题

这几天在学习数据关联的方法,本来想使用ICP算法进行距离测距数据的配准,但是用的过程中出现问题,配的不准,而且偏差更大了。 红色的和黄色的2维激光点进行ICP配准,但将变换矩阵和黄色进行乘之后偏差更大了。怀疑是因为两个点集只有部分数据重合,而ICP算法最好是点能一一对应。 之后使用PCL进行点集匹配测试,出现同样的问题。 于是我自己构造了一个数据,将A...

用友UAP

uap是用友面向大中型企业与公共组织的统一应用平台,它是用友公司从多年应用软件研制过程中提炼出来的模型、模板、开发工具、应用框架、中间件、基础技术类库及研发模式等成果,采用可视化开发模式集成在一起,提供覆盖软件全生命周期的开发、集成、运行、管理等功能于一体的统一应用平台; uap开发平台: NC是一个基于Java标准(更多的是JavaEE标准)的、以B/S...

hive-命令操作记录

Hive 的官方文档请参考:http://wiki.apache.org/hadoop/Hive/LanguageManual 。 Create Table CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment], .....