Hadoop集群所有的DataNode都启动不了解决办法

首先会出现几种情况,才会出现启动不了datanode的情况。

1.首先修改过master那台的配置文件,

2.多次Hadoop namenode -format这种不好的习惯。

一般会出现一下报错:

java.io.IOException: Cannot lock storage /usr/hadoop/tmp/dfs/name. The directory is already locked.

或者是:

[root@hadoop current]# hadoop-daemon.sh start datanode

starting datanode, logging to /usr/local/hadoop1.1/libexec/../logs/hadoop-root-datanode-hadoop.out

[root@hadoop ~]# jps

jps命令发现没有datanode启动

对于这种情况请先试一下:

在坏死的节点上输入如下命令即可:

bin/Hadoop-daemon.sh start DataNode

bin/Hadoop-daemon.sh start jobtracker

如果还不可以的话,那么恭喜你和我遇到的情况一下。

正确的处理方法是,到你的每个Slave下面去,找到.../usr/hadoop/tmp/dfs/  -ls

会显示有: data

这里需要把data文件夹删掉。接着直接在刚才的目录下启动hadoop

start-all.sh

接着查看jps

那么就会出现datanode.了

接着去看

http://210.41.166.61(你的master的IP):50070

里面的活节点有多少个?

http://210.41.166.61(你的master的ip):50030/

显示的node数目。

OK,问题解决。

Hadoop的datanode新建异常处理 http://www.linuxidc.com/Linux/2013-12/93614.htm

Hadoop的DataNode无法启动问题解决 http://www.linuxidc.com/Linux/2014-12/110261.htm

Hadoop 启动节点Datanode失败解决  http://www.linuxidc.com/Linux/2014-11/108822.htm

CentOS安装和配置Hadoop2.2.0  http://www.linuxidc.com/Linux/2014-01/94685.htm

Ubuntu 13.04上搭建Hadoop环境 http://www.linuxidc.com/Linux/2013-06/86106.htm

Ubuntu 12.10 +Hadoop 1.2.1版本集群配置 http://www.linuxidc.com/Linux/2013-09/90600.htm

Ubuntu上搭建Hadoop环境(单机模式+伪分布模式) http://www.linuxidc.com/Linux/2013-01/77681.htm

Ubuntu下Hadoop环境的配置 http://www.linuxidc.com/Linux/2012-11/74539.htm

单机版搭建Hadoop环境图文教程详解 http://www.linuxidc.com/Linux/2012-02/53927.htm

搭建Hadoop环境(在Winodws环境下用虚拟机虚拟两个Ubuntu系统进行搭建) http://www.linuxidc.com/Linux/2011-12/48894.htm

更多Hadoop相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

本文永久更新链接地址http://www.linuxidc.com/Linux/2015-01/111891.htm



--------摘自网上

启动 Hadoop 集群后,**DataNode 没有起来**是一个非常常见的问题,尤其是在初次搭建或重新格式化 NameNode 后。下面我们将从 **根本原因、排查步骤、解决方案到验证方法** 进行系统性分析,并提供可直接执行的代码和配置建议。 --- ### ✅ 一、典型现象 - 执行 `jps` 命令看不到 `DataNode` 进程 - HDFS Web UI(`http://<namenode>:9870`)中看不到该节点 - 日志报错:`Incompatible clusterID`、`Cannot bind address`、`shutdown` 等关键词 --- ### ✅ 二、完整排查流程与解决方案 #### 🔍 步骤1:确认是否真的没启动 ```bash # 查看当前 Java 进程 jps # 正常应看到(在 DataNode 节点上): # DataNode # NodeManager(如果是 YARN 节点) ``` 👉 如果没有 `DataNode`,说明未启动启动失败。 --- #### 🔍 步骤2:查看 DataNode 日志定位错误 日志路径一般为: ```bash $HADOOP_HOME/logs/hadoop-*-datanode-*.log ``` 使用命令查看最近错误: ```bash tail -n 200 $HADOOP_HOME/logs/hadoop-*-datanode-*.log | grep -i "error\|exception\|fatal" ``` 重点关注以下几类常见错误: --- ## 🚨 常见原因及解决方案 --- ### ❌ 原因1:NameNode 格式化过,但 DataNode 的 clusterID 不匹配(最常见) > **错误日志示例**: ``` FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for Block pool <registering> java.io.IOException: Incompatible clusterIDs in /data/hadoop/dfs/data: namenode clusterID = CID-xxx; datanode clusterID = CID-yyy ``` 📌 **原因**:你执行了 `hdfs namenode -format`,生成了一个新的 `clusterID`,但 DataNode 目录里还保留着旧的元数据信息,导致不兼容。 🔧 **解决方法**: ```bash # 1. 停止集群 stop-dfs.sh # 2. 删除 DataNode 的数据目录(根据 hdfs-site.xml 中 dfs.datanode.data.dir 配置) rm -rf /data/hadoop/dfs/data # 替换为你自己的路径 # 3. 重新创建目录并赋权 mkdir -p /data/hadoop/dfs/data chown -R hadoop:hadoop /data/hadoop/dfs/data chmod -R 755 /data/hadoop/dfs/data # 4. 重启集群 start-dfs.sh ``` ✅ 注意:只要 format 过 NameNode,所有 DataNode 的数据目录都必须清空! --- ### ❌ 原因2:DataNode 数据目录权限不足 > **错误日志**: ``` Permission denied: user=root, access=WRITE ``` 🔧 **解决方案**: 确保运行 Hadoop 的用户对数据目录有读写权限: ```bash sudo chown -R hadoop:hadoop /data/hadoop/dfs/data sudo chmod -R 755 /data/hadoop/dfs/data ``` 并在 `$HADOOP_CONF_DIR/hdfs-site.xml` 中确认配置正确: ```xml <property> <name>dfs.datanode.data.dir</name> <value>/data/hadoop/dfs/data</value> </property> ``` --- ### ❌ 原因3:防火墙阻止通信或端口被占用 DataNode 使用的关键端口: | 端口 | 协议 | 用途 | |------|------|------| | 50010 | TCP | DataNode 数据传输 | | 50020 | TCP | DataNode IPC/RPC 通信 | | 50075 | HTTP | DataNode Web UI | 🔍 检查端口是否被占用: ```bash lsof -i :50010 netstat -tulnp | grep :50010 ``` 关闭防火墙(测试环境): ```bash # CentOS/RHEL sudo systemctl stop firewalld sudo systemctl disable firewalld # 或开放特定端口 sudo firewall-cmd --permanent --add-port=50010/tcp sudo firewall-cmd --reload ``` --- ### ❌ 原因4:hostname 或 `/etc/hosts` 配置错误 Hadoop 依赖主机名进行节点间通信。 ✅ 检查 `/etc/hosts` 是否配置正确: ```bash # 在每台机器上添加 192.168.1.10 namenode 192.168.1.11 datanode1 192.168.1.12 datanode2 ``` 检查本机 hostname: ```bash hostname # 应输出 datanode1 cat /etc/hostname ``` 如果修改了 hostname,需重启或执行: ```bash hostname datanode1 ``` --- ### ❌ 原因5:NameNode 没有启动或网络不通 DataNode 启动时需要向 NameNode 注册。如果 NameNode 没起或网络不通,注册失败。 ✅ 检查 NameNode 是否运行: ```bash # 在 NameNode 节点执行 jps # 应看到 NameNode ``` 访问 Web 页面: ``` http://namenode-ip:9870 ``` 测试网络连通性: ```bash ping namenode telnet namenode 9870 ``` --- ### ❌ 原因6:Java 环境异常或内存不足 > **错误日志**: ``` Could not reserve enough space for object heap ``` 🔧 修改 `$HADOOP_CONF_DIR/hadoop-env.sh`: ```bash export HADOOP_HEAPSIZE=1024 # 设置堆大小为 1GB,避免过大 export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 # 确保 JAVA_HOME 正确 ``` --- ### ❌ 原因7:多次 format 导致元数据混乱(深层问题) 即使删除 data 目录,有时 metadata 缓存仍残留。 ✅ 彻底清理整个 HDFS 元数据: ```bash # 清理 NameNode 元数据目录 rm -rf /data/hadoop/dfs/name/* # 清理所有 DataNode 数据目录 rm -rf /data/hadoop/dfs/data/* ``` 然后重新 format 并启动: ```bash hdfs namenode -format start-dfs.sh ``` --- ## ✅ 三、完整启动流程(推荐) ```bash # Step 1: 清理元数据(仅首次或调试) rm -rf /data/hadoop/dfs/name/* rm -rf /data/hadoop/dfs/data/* # Step 2: 格式化 NameNode hdfs namenode -format # Step 3: 启动 DFS start-dfs.sh # Step 4: 检查各节点 jps jps # 确认出现 DataNode ``` --- ## ✅ 四、验证 DataNode 是否成功加入 ### 方法1:使用命令行查看报告 ```bash hdfs dfsadmin -report ``` 输出中应包含你的 DataNode IP 和存储信息。 ### 方法2:访问 HDFS Web UI 打开浏览器: ``` http://<namenode-host>:9870 → 左侧点击 "Datanodes" → 查看是否有新节点上线 ``` ### 方法3:检查日志是否正常注册 ```bash tail $HADOOP_HOME/logs/hadoop-*-datanode-*.log | grep "register" ``` 正常输出: ``` Registration succeeded by connecting to localhost/127.0.0.1:9867 ``` --- ## ✅ 五、预防措施总结 | 措施 | 说明 | |------|------| | ❌ 不要随意 `format` NameNode | 生产环境绝对禁止 | | ✅ 使用固定数据目录 | 避免用 `/tmp`(重启清除) | | ✅ 统一 hosts 和 hostname | 防止 DNS 解析失败 | | ✅ 定期监控日志 | 提前发现异常 | | ✅ 设置合理权限 | 防止 Permission Denied | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值