做网站的公司重庆,成品网站短视频源码搭建,html个人网页制作步骤,企业网站设计多少钱文章目录 #xff08;63#xff09;DataNode工作机制#xff08;64#xff09;数据完整性#xff08;65#xff09;掉线时限参数设置参考文献 #xff08;63#xff09;DataNode工作机制
DataNode内部存储了一个又一个Block#xff0c;每个block由数据和数据元数据组… 文章目录 63DataNode工作机制64数据完整性65掉线时限参数设置参考文献 63DataNode工作机制
DataNode内部存储了一个又一个Block每个block由数据和数据元数据组成。数据元数据包括数据长度、校验和、时间戳等。
在物理的目录里每个block的数据和数据源数据是分两个文件保存的。
DataNode的工作机制如图 DataNode启动后会向NameNode注册表示自己活着可以接受任务NameNode接收到请求后注册相应信息并向DataNode返回注册成功的信号之后DataNode会按周期默认是6小时向NameNode上报自己所保存的所有block信息此举的目的是定时让NameNode知道自己旗下的blocks是否都还可用NameNode和DataNode每隔3s会来一轮心跳目的是检查DataNode是否还活着以及返回NameNode要带给DataNode的指令。如果超过3s没联系上NameNode也不会直接抛弃DataNode。一般是10min 30s机制即超过10分钟之后再来30s即10次心跳如果还是没有联系上NameNode才会认为这个DataNode挂了之后NameNode将不会再对这个DataNode安排读写任务
DN向NN汇报自身保存的blocks的时间间隔默认是6h
propertynamedfs.blockreport.intervalMsec/namevalue21600000/valuedescriptionDetermines block reporting interval in milliseconds./description
/propertyDN 扫描自身节点块信息列表的时间默认也是6h
propertynamedfs.datanode.directoryscan.interval/namevalue21600s/valuedescriptionInterval 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 describedin dfs.heartbeat.interval./description
/propertyDN的正常流程是先自查扫描自身块信息后汇报。
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。
propertynamedfs.namenode.heartbeat.recheck-interval/namevalue300000/value
/propertypropertynamedfs.heartbeat.interval/namevalue3/value
/property需要注意的是hdfs-site.xml 配置文件中的heartbeat.recheck.interval的单位为毫秒dfs.heartbeat.interval的单位为秒。
参考文献
【尚硅谷大数据Hadoop教程hadoop3.x搭建到集群调优百万播放】