DataNode
1. DataNode工作机制
- 一个数据块在DataNode上以文件形式存储在磁盘上,
包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。
- DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息。
心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。
- 集群运行中可以安全加入和退出一些机器。
2. 数据完整性
思考:如果电脑磁盘里面存储的数据是控制高铁信号灯的红灯信号(1)和绿灯信号(0)
,但是存储该数据的磁盘坏了,一直显示是绿灯,是否很危险?同理DataNode节点上的数据损坏了,却没有发现,是否也很危险,那么如何解决呢?
如下是DataNode节点保证数据完整性的方法。
- 当DataNode读取Block的时候,它会计算CheckSum。
- 如果计算后的CheckSum,与Block创建时值不一样,说明Block已经损坏。
- Client读取其他DataNode上的Block。
- DataNode在其文件创建后周期验证CheckSum,如图(只是一种简单的校验方式,实际有很多)
3. 掉线时限参数设置
需要注意的是
hdfs-site.xml
配置文件中
heartbeat.recheck.interval的单位为毫秒
dfs.heartbeat.interval的单位为秒
<property> <name>dfs.namenode.heartbeat.recheck-interval</name> <value>300000</value> </property> <property> <name>dfs.heartbeat.interval</name> <value>3</value> </property>
4. Datanode多目录配置
DataNode也可以配置成多个目录,每个目录存储的数据不一样,所以数据不是副本。
具体配置如下:
hdfs-site.xml
<property> <name>dfs.datanode.data.dir</name> <value> file:///${hadoop.tmp.dir}/dfs/data1, file:///${hadoop.tmp.dir}/dfs/data2 </value> </property>