一、问题定位:
(1)检查DataNode日志:
DataNode日志通常位于$HADOOP_HOME/logs/或/var/log/hadoop-hdfs/目录下,文件名为hadoop-hdfs-datanode-<hostname>.log。重点关注以下错误类型:
——Incompatible namespaceIDs或Incompatible clusterIDs(namespaceID或clusterID不一致)
——java.io.IOException: Cannot lock storage(存储目录被锁定)
——java.net.NoRouteToHostException(网络连接问题)
——Permission denied(目录权限错误)
——Disk space full(磁盘空间不足)
(2)使用命令行工具验证状态
——执行jps命令确认DataNode进程是否存活。
_访问NameNode Web UI(默认端口50070),检查活跃DataNode列表是否包含问题节点。
二、问题解决:
(1)namespaceID或clusterID不一致
原因:多次执行hdfs namenode -format导致NameNode与DataNode的ID不匹配。
解决步骤:
方法一(数据可丢失时):
①停止集群:stop-all.sh
②删除所有DataNode节点的数据目录(路径由dfs.data.dir配置,默认如/tmp/dfs/data)。
③ 重新格式化NameNode:hdfs namenode -format
④ 启动集群:start-all.sh
方法二(保留数据):
① 手动同步ID:
—在NameNode的VERSION文件(路径如/tmp/dfs/name/current/VERSION)中获取clusterID。
—在问题DataNode的VERSION文件(路径如/tmp/dfs/data/current/VERSION)中修改clusterID与NameNode一致。
② 重启DataNode:hadoop-daemon.sh stop datanode → hadoop-daemon.sh start datanode
(2)存储目录权限问题
原因:DataNode本地目录权限不足或归属用户错误。
解决步骤:
① 检查目录权限:ls -l /path/to/dfs/data
② 修改权限(以Hadoop用户为例):
chown -R hadoop:hadoop /path/to/dfs/data chmod 700 /path/to/dfs/data |
③ 重启DataNode服务。
(3)防火墙或SELinux限制
原因:防火墙阻止DataNode与NameNode通信(默认端口50010/50020)。
解决步骤:
① 关闭防火墙:
systemctl stop firewalld |
② 禁用SELinux:
setenforce 0 # 临时关闭 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config # 永久关闭 |
(4) 磁盘空间不足或损坏
原因:DataNode存储目录所在磁盘写满或物理损坏。
解决步骤:
① 检查磁盘空间:df -h
② 清理临时文件或迁移数据:
—删除过期数据:hdfs dfs -rm -skipTrash <path>
—扩展磁盘或挂载新存储设备。
③ 若磁盘损坏:
—更换磁盘后,修改hdfs-site.xml中dfs.datanode.data.dir指向新路径。
—调整dfs.datanode.failed.volumes.tolerated允许容忍的磁盘故障数。
(5) 集群时间不同步
原因:节点间时间偏差超过阈值(默认5分钟)导致心跳超时。
解决步骤:
① 安装NTP服务并同步时间:
ntpdate cn.pool.ntp.org # 手动同步 systemctl enable ntpd # 启用NTP服务 |
② 验证时间同步:ntpq -p
(6)配置文件错误
原因:配置文件(如hdfs-site.xml、core-site.xml)不一致或参数错误。
解决步骤:
① 对比正常节点与问题节点的配置文件,确保所有参数一致。
② 检查关键配置项:
<!-- hdfs-site.xml --> <property> <name>dfs.datanode.data.dir</name> <value>/data1/hdfs/data,/data2/hdfs/data</value>//你虚拟机的主机名,伪分布式只有一个 </property> <!-- core-site.xml --> <property> <name>fs.defaultFS</name> <value>hdfs://namenode:9000</value> </property> |
③ 同步配置文件后重启服务。
三、问题预防:
(1)避免频繁格式化NameNode:仅在首次部署或灾难恢复时执行hdfs namenode -format。
(2)定期监控磁盘与日志:通过工具(如Ambari、Cloudera Manager)监控磁盘使用率和日志异常。
(3)配置自动化运维:使用Ansible或Chef同步配置文件和启动脚本。
(4)备份关键数据:定期备份NameNode元数据(fsimage和edits)至异地存储