1 DataNode 工作机制

  1. 一个数据块在 DataNode 上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。

  2. DataNode 启动后向 NameNode 注册,通过后,周期性(1 小时)的向 NameNode上报所有的块信息。

  3. 心跳是每 3 秒一次,心跳返回结果带有 NameNode 给该 DataNode 的命令如复制块数据到另一台机器,或删除某个数据块。如果超过 10 分钟没有收到某个 DataNode 的心跳,则认为该节点不可用。

  4. 集群运行中可以安全加入和退出一些机器。

2 数据完整性检验

​ 若 DataNode 节点上的数据出现损坏,显然会造成一些不必要的损失。如何保证 DataNode 节点的数据完整性十分有必要,检验流程如下:

  1. 当 DataNode 读取 Block 的时候,它会计算 CheckSum 。
  2. 如果计算后的 CheckSum,与 Block 创建时值不一样,说明 Block 已经损坏。
  3. Client 读取其他 DataNode 上的 Block。
  4. 常见的校验算法 crc(32),md5(128),sha1(160)
  5. DataNode 在其文件创建后周期验证 CheckSum。

3 掉线时限参数设置

  1. DataNode 进程死亡或者网络故障造成无法与NameNode通信;
  2. NameNode不会立即把该节点判定为死亡,要经过一段时间,这段时间暂称作超时时长;
  3. HDFS默认的超时时长为10 min + 30 s;
  4. 如果定义超时时间为TimeOut,则超时时长的计算公式为:
    TimeOut = 2 dfs.namenode.heartbeat.recheck-interval + 10 dfs.heartbeat.interval

默认的dfs.namenode.heartbeat.recheck-interval 大小为5分钟,dfs.heartbeat.interval默认为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 可以配置成多个目录,每个目录存储的数据不一样。即:数据不是副本

具体配置方法:

  1. 在 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>
  1. 停止集群,删除三台节点的 data 和 logs 中所有数据。
[pbh@hadoop102 hadoop-3.1.3]$ rm -rf data/ logs/
[pbh@hadoop103 hadoop-3.1.3]$ rm -rf data/ logs/
[pbh@hadoop104 hadoop-3.1.3]$ rm -rf data/ logs/
  1. 格式化集群并启动。
[pbh@hadoop102 hadoop-3.1.3]$ bin/hdfs namenode –format
[pbh@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh
  1. 查看结果
[pbh@hadoop102 dfs]$ ll
总用量 12
drwx------. 3 pbh pbh 4096 4 月 4 14:22 data1
drwx------. 3 pbh pbh 4096 4 月 4 14:22 data2
drwxrwxr-x. 3 pbh pbh 4096 12 月 11 08:03 name1
drwxrwxr-x. 3 pbh pbh 4096 12 月 11 08:03 name2
最后修改:2022 年 08 月 22 日
如果觉得我的文章对你有用,请随意赞赏