Hadoop3教程(六):HDFS中的DataNode

文章目录

(63)DataNode工作机制

DataNode内部存储了一个又一个Block,每个block由数据和数据元数据组成。数据元数据包括数据长度、校验和、时间戳等。

在物理的目录里,每个block的数据和数据源数据是分两个文件保存的。

DataNode的工作机制如图:

  1. DataNode启动后,会向NameNode注册,表示自己活着,可以接受任务;
  2. NameNode接收到请求后,注册相应信息,并向DataNode返回注册成功的信号;
  3. 之后,DataNode会按周期(默认是6小时)向NameNode上报自己所保存的所有block信息,此举的目的是定时让NameNode知道,自己旗下的blocks是否都还可用;
  4. NameNode和DataNode每隔3s 会来一轮心跳,目的是检查DataNode是否还活着,以及返回NameNode要带给DataNode的指令。
  5. 如果超过3s没联系上,NameNode也不会直接抛弃DataNode。一般是10min + 30s机制,即超过10分钟之后,再来30s,即10次心跳,如果还是没有联系上,NameNode才会认为这个DataNode挂了,之后NameNode将不会再对这个DataNode安排读写任务;

DN向NN汇报自身保存的blocks的时间间隔,默认是6h

xml 复制代码
<property>
	<name>dfs.blockreport.intervalMsec</name>
	<value>21600000</value>
	<description>Determines block reporting interval in milliseconds.</description>
</property>

DN 扫描自身节点块信息列表的时间,默认也是6h:

xml 复制代码
<property>
	<name>dfs.datanode.directoryscan.interval</name>
	<value>21600s</value>
	<description>Interval in seconds for Datanode to scan data directories and reconcile the difference between blocks in memory and on the disk.
	Support multiple time unit suffix(case insensitive), as described
	in dfs.heartbeat.interval.
	</description>
</property>

DN的正常流程是先自查(扫描自身块信息),后汇报。

(64)数据完整性

Hadoop在底层是如何知道数据是准确的还是不准确的,即DataNode如何验证数据完整性呢,它是如何发现自己保存的数据有问题呢?主要有这么三步:

(1) 将客户端上的原始数据封装,封装方式是在待传输数据后面,加上一位 奇偶校验位:

如果待传输数据是01000001,有两个1,是偶数,则奇偶校验位设置为0;

如果待传输数据是01001001,有三个1,是奇数,则奇偶校验位设置为1;

(2) 封装后的原始数据,通过网络传输,上传到HDFS上;

(3) HDFS接收到数据之后,会对数据进行再次的奇偶性校验,以避免网络传输过程中出现异常(DataNode也会在文件创建后周期性的验证校验位),比如说有的0被传成了1;

但这也是奇偶校验位的缺点,就是他只能检查一个0变成1的异常,如果是两个0同时变成了1,那么奇偶校验就校验不出来了。

不过,一般认为,同时坏两个数据位的概率是比较小的,所以奇偶校验位在常规情况下也足够应付。

但是这样做毕竟还是不保险,所以现在Hadoop里在封装时采用的,不是奇偶校验位,而是 crc校验位 。

crc校验位,又被称为循环冗余校验码,在通信领域应用的比较广泛。简单看了一下基本原理,比较复杂,简单来讲就是指定选定一个除数,使用原始数据与选定的除数进行二进制除法运算,计算出俩的余数就是crc校验位,一般为4位。

其中这个除数是发送端和接收端通用的。接收端收到原始数据后也会进行相同的运算,得到的结果跟校验位一样的话说明数据没问题,或者说直接拿封装后的原始数据去除,没有余数的话,说明没问题。

(65)掉线时限参数设置

就是之前说的那个DataNode的10min + 30s的超时机制。如果NameNode超过3s没有接收到DataNode的信息,NN不会立即判定该DataNode不可用,而是要经过一段时间,这段时间内仍然没有接收到心跳的话,才会认为该DataNode已经下线,而这段时间就被称为是超时时长。

作用可见63小节内容,我记在那里面了。

关于心跳时间和心跳超时时长(timeout,即10min + 30s机制)的设置,是在hdfs-site.xml里。

超时时长的计算公式:

复制代码
timeout = 2 * dfs.namenode.heartbeat.recheck-interval + 10 * dfs.heartbeat.interval

默认的heartbeat.recheck.interval是5min;默认的dfs.heartbeat.interval是3s。

xml 复制代码
<property>
    <name>dfs.namenode.heartbeat.recheck-interval</name>
    <value>300000</value>
</property>

<property>
    <name>dfs.heartbeat.interval</name>
    <value>3</value>
</property>

需要注意的是hdfs-site.xml 配置文件中的heartbeat.recheck.interval的单位为毫秒,dfs.heartbeat.interval的单位为秒。

参考文献

  1. 【尚硅谷大数据Hadoop教程,hadoop3.x搭建到集群调优,百万播放】
相关推荐
lifallen24 分钟前
Flink Watermark 设计分析
java·大数据·flink
永霖光电_UVLED1 小时前
Cree LED 推出一款专为满足现代园艺和农业照明需求红光LED
大数据·汽车·制造·娱乐
萌>__<新1 小时前
Git常见使用命令及易踩坑点
大数据·elasticsearch·搜索引擎
TechMasterPlus2 小时前
Harness Engineer:把 AI 变成可复用工程能力的实践指南
大数据·人工智能
wydxry2 小时前
深入解析自适应光学中的哈特曼波前传感技术:原理、算法与智能化前沿
大数据·人工智能·算法
豆豆2 小时前
集团网站建设指南:站群架构如何平衡品牌统一与业务独立
大数据·人工智能·cms·网站建设·网站制作·建站·站群cms
SarL EMEN3 小时前
Python大数据可视化:基于大数据技术的共享单车数据分析与辅助管理系统_flask+hadoop+spider
大数据·python·信息可视化
七月稻草人3 小时前
ToClaw炒股个人踩坑实录:我实盘 2 个月踩过的坑、避坑指南与真实使用感受
大数据·人工智能·toclaw
大大大大晴天️3 小时前
Flink技术实践-FlinkSQL视图View避坑指南
大数据·flink
武子康3 小时前
大数据-272 Spark MLib-Spark MLlib 逻辑回归实战:二分类场景下的原理与代码实现
大数据·后端·spark