Hadoop完全分布式部署-Master的NameNode以及Slaver2的DataNode未启动

一、问题描述

如题,在搭建Hadoop完全分布式模式时,启动hadoop之后在master\slaver1\slaver2节点使用JPS命令行后显示master节点的NameNode以及slaver1节点的DataNode节点未正常启动

二、问题原因

A、master 节点看不到 NameNode(异常)的常见原因

1、集群未格式化或格式化后重新启动

第一次启动 HDFS 前必须执行 hdfs namenode -format,如果没格式化,NameNode 不会启动;如果格式化多次且未清理数据目录,会导致集群 ID 不匹配,NameNode 启动失败。

Hadoop 格式化(hdfs namenode -format)会生成唯一的 clusterID,如果多次格式化,NameNode 的clusterID 会更新,但 DataNode 保留旧 ID,导致两者无法通信,最终表现为 DataNode 启动失败

2、配置文件错误(最常见)

core-site.xml 或 hdfs-site.xml 配置错误,比如 fs.defaultFS 地址写错、NameNode 数据目录权限不足。

B、slaver 节点没有 DataNode 的常见原因

1、集群格式化后,DataNode 节点的 clusterID 不匹配(最常见)

多次执行 hdfs namenode -format,导致 NameNode 的 clusterID 变更,但各 slaver 节点上旧的 DataNode 数据目录还保留,ID 对不上,DataNode 启动失败。

2、配置文件未同步到 slaver 节点

在 master 上修改了 core-site.xml / hdfs-site.xml,但没通过 xsync 同步到 slaver1/slaver2,导致 DataNode 找不到 NameNode 地址。

注意:在从master节点分发时,要保持slaver1节点和slaver2节点都在线

3、master 到 slaver 的免密登录未配置

start-dfs.sh 启动时,master 需要通过 SSH 免密登录到 slaver 节点,启动 DataNode 进程。如果免密失败,DataNode 不会启动。

总的来说,这两个问题通常是配置 / 数据目录 / 网络 三类问题导致,且 NameNode 未启动是 "主因"(DataNode 依赖 NameNode 存活,NameNode 挂了,DataNode 也会启动失败)。

所以需要 "先解决 NameNode(核心)"→ "再解决 DataNode"

三、解决步骤

思路:首先尝试了重新启动节点和hadoop,发现重启之后依旧未能正常启动,然后排除了网络、配置文件的问题,因此决定再重新分发一次+格式化后再启动

1、如果hadoop还在运行,首先需要停止所有 Hadoop 服务(必须先停,否则删文件会出问题)

bash 复制代码
# 停止 HDFS 和 YARN 所有服务
stop-dfs.sh
stop-yarn.sh
# 确保残留进程都被杀死(可选,更彻底)
jps | grep -E 'NameNode|DataNode|ResourceManager|NodeManager' | awk '{print $1}' | xargs kill -9 2>/dev/null

2、重新分发需要先清除NameNode数据目录和DataNode数据目录

找到目录有两种方法

(1)、直接看配置文件

打开core-site.xml文件,找到

bash 复制代码
<property>
    <name>hadoop.tmp.dir</name>
    <value> >/opt/module/hadoop-3.1.3/data </value>
</property>

这几行配置,因为hadoop.tmp.dir是用来指定Hadoop临时数据的存储目录,所以<value></value>之间的就是路径

(2)使用命令行查看(推荐)

bash 复制代码
#查看namenode路径
hdfs getconf -confKey dfs.namenode.name.dir

hdfs getconf -confKey dfs.datanode.data.dir
hdfs getconf -confKey hadoop.tmp.dir

(3)得到路径之后,在 master 节点批量清理(也可在每个节点上单独清理,但这样麻烦,不建议)

直接在master节点上输入下列代码

bash 复制代码
# 批量清理 master、slaver1、slaver2 的旧数据
for host in master slaver1 slaver2
do
  echo "==================== 正在清理 $host 节点的旧数据 ===================="
  # 清理 NameNode 数据(仅 master 有,slaver 节点会自动忽略)
  ssh $host "rm -rf /opt/module/hadoop-3.1.3/data/dfs/name/* 2>/dev/null"
  # 清理 DataNode 数据(所有节点都有)
  ssh $host "rm -rf /opt/module/hadoop-3.1.3/data/dfs/data/* 2>/dev/null"
  # 额外清理 Hadoop 临时目录(避免残留缓存)
  ssh $host "rm -rf /opt/module/hadoop-3.1.3/tmp/* 2>/dev/null"
  echo "$host 节点清理完成!"
done

注意:这里/opt/module/hadoop-3.1.3/data/dfs/name/需要修改为自己的路径

终端会依次显示如下内容,说明清理在逐个节点执行:

==================== 正在清理 master 节点的旧数据 ====================

master 节点清理完成!

==================== 正在清理 slaver1 节点的旧数据 ====================

slaver1 节点清理完成!

==================== 正在清理 slaver2 节点的旧数据 ====================

slaver2 节点清理完成!

运行结束后验证清理结果:

先在master上验证:

bash 复制代码
ls -l /opt/module/hadoop-3.1.3/data/dfs/name/

然后任选一个节点验证:

bash 复制代码
ls -l /opt/module/hadoop-3.1.3/data/dfs/data/

✅ 正常输出:total 0(目录为空),说明已被彻底删除。

(4)接下来就可以正常格式化+重启了

重启之后会发现都正常启动了

相关推荐
小荟荟2 小时前
全国数据资产新闻和报纸摘要联播 2026年3月11日 第15期
大数据·人工智能
杨航 AI2 小时前
Frank-Job +Dify 实现openclaw Cron 分布式任务调度的AI化思考
人工智能·分布式
盘古信息IMS2 小时前
当注塑机开始“思考”:昊方汽车携手盘古信息&中国联通启动IMS V6数智化转型项目
大数据·人工智能·汽车
guoguangwu2 小时前
kafka容器增加健康检查
分布式·kafka
rainy雨2 小时前
精益生产系统功能拆解:利用精益生产解决多品种小批量场景下的库存积压难题
大数据·人工智能·精益工程
白鲸开源2 小时前
SeaTunnel × Gravitino:Schema URL 驱动的表结构自动感知方案
大数据·人工智能·开源
Java爱好狂.2 小时前
2026如何备战互联网大厂Java面试?
java·分布式·高并发·java面试·后端开发·java架构师·互联网大厂
wanhengidc2 小时前
服务器对于企业的作用
大数据·运维·服务器·分布式
ApacheSeaTunnel3 小时前
Apache SeaTunnel 2.3.13 重磅发布!最值得关注的 Top 10 功能更新
大数据·数据集成·seatunnel·数据同步·发版