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)接下来就可以正常格式化+重启了

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

相关推荐
财迅通Ai20 小时前
6000万吨产能承压 卫星化学迎来战略窗口期
大数据·人工智能·物联网·卫星化学
做个文艺程序员20 小时前
私有 LLM 多机多卡分布式推理:Pipeline Parallel vs Tensor Parallel 踩坑全记录
人工智能·分布式
武子康21 小时前
大数据-263 实时数仓-Canal 增量订阅与消费原理:MySQL Binlog 数据同步实践
大数据·hadoop·后端
LJ979511121 小时前
媒体发布新武器:Infoseek融媒体平台使用指南
大数据·人工智能
科技小花21 小时前
AI重塑数据治理:2026年核心方案评估与场景适配
大数据·人工智能·云原生·ai原生
方向研究21 小时前
存储芯片生产
大数据
代码青铜21 小时前
如何用 Zion 实现 AI 图片分析与电商文案自动生成流程
大数据·人工智能
gaoshengdainzi1 天前
GB/T23448-2019卫生洁具软管专用检测设备全套解决方案
大数据·卫生洁具软管检测设备·软管试验机
foundbug9991 天前
Matlab基于分布式模型预测控制的多固定翼无人机共识控制
分布式·matlab·无人机
茶靡花开04151 天前
什么是DMS经销商管理系统?经销商管理系统哪个好?
大数据·人工智能