DataNode工作机制与实操案例演示
一、引言
Hadoop HDFS简介
- 分布式文件系统概述
- HDFS架构:NameNode与DataNode
DataNode的重要性
- 数据存储与访问的关键角色
- 数据完整性与高可用性的保障

二、DataNode工作机制
- 启动与注册
- DataNode启动后向NameNode注册
- 注册成功后,周期性向NameNode上报块信息
- 心跳机制
- 心跳周期(默认每3秒一次)
- 心跳返回结果:NameNode的命令(如复制、删除数据块)
- 心跳超时处理(默认10分钟+30s无心跳则认为节点不可用)
- 数据存储与管理
- 数据块以文件形式存储在磁盘上
- 每个数据块包括数据文件和元数据文件(包含长度、校验和、时间戳)
三、实操案例演示
1. DataNode启动与注册
1.1 新增DataNode节点
配置文件
- hosts配置(all)
- ssh免密登录(master–> node4)
slaves新增node4(all)
启动DataNode和NodeManager
1 | [zhangsan@node4 default]$ hadoop-daemon.sh start datanode |
刷新节点状态
1 | [zhangsan@node1 ~]$ hdfs dfsadmin -refreshNodes |

负载均衡
1 | 设置负载均衡带宽 |
https://partners-intl.aliyun.com/help/en/e-mapreduce/latest/hdfs-balancer
1.2 移除DataNode节点
Master配置排除节点列表
hdfs-site.xml
1 | <property> |
datanode-excludes (一行一个)
1 | node4 |
yarn-site.xml
1 | <property> |
nodemanager-excludes (一行一个)
1 | node4 |
刷新节点状态
1 | [zhangsan@node1 hadoop]$ hdfs dfsadmin -refreshNodes |
Decommission In Progress --> Decommissioned


停止守护进程
1 | [zhangsan@node4 ~]$ hadoop-daemon.sh stop datanode |
查看下线情况
1 | [zhangsan@node1 ~]$ hdfs dfsadmin -report |
2. 心跳机制验证
- 演示DataNode心跳发送过程
- 修改心跳间隔(通过hdfs-site.xml配置文件)
| 配置项 | 配置值 | 说明 | 自定义 |
|---|---|---|---|
| dfs.heartbeat.interval | 3 | Determines datanode heartbeat interval in seconds. | 3 |
| dfs.namenode.heartbeat.recheck-interval | 300000 | 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. | 60000 |
- 观察NameNode对心跳超时的处理
默认dfs.namenode.heartbeat.recheck-interval为5分钟,dfs.heartbeat.interval默认为3秒
DataNode节点掉线时限是指系统检测到DataNode不再响应的时间阈值。
TimeOut假定为超长时间(默认为10分钟+30秒):
TimeOut = 2 * dfs.namenode.heartbeat.recheck-interval + 10 * dfs.heartbeat.interval
3. 数据块管理
- 演示向HDFS写入文件,观察DataNode上数据块的变化
- 演示DataNode上数据块的删除与恢复
检查集群状态:
1
hdfs dfsadmin -report
3.1 数据块的写入
创建本地文件:
创建一个简单的文本文件,用于写入HDFS。1
echo "Hello, HDFS" > localfile.txt
将文件写入HDFS:
1
2hdfs dfs -mkdir -p /user/zhangsan/
hdfs dfs -put localfile.txt /user/zhangsan/观察DataNode上的数据块:
通过Hadoop Web UI查看:打开浏览器并访问
http://<NameNode-IP>:50070,导航到“DataNodes”页面,查看数据块信息。或者使用命令行:
1
hdfs fsck /user/zhangsan/localfile.txt -files -blocks -locations
1 | [zhangsan@node1 ~]$ hdfs fsck /user/zhangsan/localfile.txt -files -blocks -locations |
3.2 数据块的删除
删除HDFS中的文件:
1
hdfs dfs -rm /user/zhangsan/localfile.txt
观察数据块的删除:
- 再次通过Hadoop Web UI或命令行工具检查数据块是否已被删除。
1
2
3
4
5
6
7
8[zhangsan ~]$ hdfs fsck /user/zhangsan/localfile.txt -files -blocks -locations
FileSystem is inaccessible due to:
java.io.FileNotFoundException: File does not exist: /user/zhangsan/localfile.txt
at org.apache.hadoop.fs.FileSystem.resolvePath(FileSystem.java:753)
... ...
at org.apache.hadoop.hdfs.tools.DFSck.main(DFSck.java:377)
DFSck exiting
3.3 数据块的恢复
准备文件:
1
[zhangsan@node1 ~]$ hdfs dfs -put localfile.txt /user/zhangsan/
模拟数据块丢失:
- 通过关闭一个DataNode来模拟数据块丢失,然后观察Hadoop如何处理。
1
2# 手动停止DataNode2
[zhangsan@node2 ~]$ hadoop-daemon.sh stop datanode
注意:默认需要等待10min+30s后,NameNode才会认为副本数减少。
恢复数据块:
- 如果副本设置(默认是3),Hadoop会自动从其他副本中恢复数据块。
1
2# 手动启动DataNode4
[zhangsan@node4 ~]$ hadoop-daemon.sh start datanode验证数据块恢复:
- 再次检查Hadoop Web UI或使用命令行工具验证数据块的状态。
四、总结与问答
- 课程总结
- 回顾DataNode工作机制与实操案例演示要点
- 问答环节
- 解答学员疑问
- 讨论DataNode在实际应用中的常见问题与解决方案
课程注意事项
- 确保实操案例演示环境稳定,避免操作失误导致集群故障。
- 提前准备好演示所需的数据文件和配置文件。
- 鼓励学员积极参与讨论,提出自己的见解和疑问。
通过这样的课程大纲,学员可以在短时间内全面了解DataNode的工作机制,并通过实操案例演示加深理解,为后续的Hadoop HDFS运维与管理打下坚实基础。
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.