1、DataNode工作机制
1.1 存储内容
NN:元数据
DN:数据、数据长度、校验和、时间戳
- 数据
- -rw-rw-r-- 1 atguigu atguigu 371984 5月 2 18:16 blk_1073750249
- 数据长度、校验和、时间戳
- -rw-rw-r-- 1 atguigu atguigu 2915 5月 2 18:16 blk_1073750249_9425.meta
1.2 工作流程
DataNode
1、DataNode启动后会向NameNode注册
- 告诉NameNode,自身节点存在哪些块信息
- 向NameNode告知自身存活,没有故障问题
NameNode
2、NameNode会记录DataNode告知的信息,存储在元数据中,返回注册成功
DataNode
3、以后定期(默认6小时)向NameNode汇报自身存在的块信息
hdfs-default.xml
<property>
<name>dfs.blockreport.intervalMsec</name>
<value>21600000</value>
<description>Determines block reporting interval in milliseconds.</description>
</property>
单位:ms 21600s 6h
DataNode
4、以后定期(默认3s)告诉NameNode自身存活,心跳机制
如果超过3s没有回复,会一直尝试,直到10分钟+30秒没有收到DataNode的心跳,就证明该节点不可用,不会在该节点读写数据
2、数据完整性
在hadoop底层采用了crc(32)算法对数据完整性做了校验,确保原始数据和上传后的数据,内容一致
crc(32) : 循环冗余校验
3、掉线时限参数设置
默认是 10分钟+30s
计算公式
<property>
<name>dfs.namenode.heartbeat.recheck-interval</name>
<value>300000</value>
<description>
This time decides the interval to check for expired datanodes.
With this value and dfs.heartbeat.interval, the interval of
deciding the datanode is stale or not is also calculated.
The unit of this configuration is millisecond.
</description>
</property>
单位:ms 300s 5min
<property>
<name>dfs.heartbeat.interval</name>
<value>3s</value>
<description>
Determines datanode heartbeat interval in seconds.
Can use the following suffix (case insensitive):
ms(millis), s(sec), m(min), h(hour), d(day)
to specify the time (such as 2s, 2m, 1h, etc.).
Or provide complete number in seconds (such as 30 for 30 seconds).
</description>
</property>
默认为3s
可以通过上次通讯时间来判断DataNode是否存活
一直刷新看,发现这个数值不会超过3s