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

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

相关推荐
WordPress学习笔记17 分钟前
镌刻中式美学的高端WordPress主题
大数据·人工智能·wordpress
数智化精益手记局1 小时前
拆解物料管理erp系统的核心功能,看物料管理erp系统如何解决库存积压与缺料难题
大数据·网络·人工智能·安全·信息可视化·精益工程
Elastic 中国社区官方博客3 小时前
使用 Observability Migration Platform 将 Datadog 和 Grafana 的仪表板与告警迁移到 Kibana
大数据·elasticsearch·搜索引擎·信息可视化·全文检索·grafana·datalog
jkyy20143 小时前
AI运动数字化:以技术重塑场景,健康有益赋能全域运动健康管理
大数据·人工智能·健康医疗
金融小师妹3 小时前
4月30日多因子共振节点:鲍威尔“收官效应”与权力结构重塑的预期重构
大数据·人工智能·重构·逻辑回归
2601_949925184 小时前
AI Agent如何重构跨境物流的决策?
大数据·人工智能·重构·ai agent·geo优化·物流科技
苍煜4 小时前
分布式事务生产实战选型对比
分布式
xiaoduo AI4 小时前
客服机器人问题解决率怎么统计?Agent系统自动判断是否解决,比人工回访准?
大数据·人工智能·机器人
小五兄弟5 小时前
YouTube 肖像检测扩展背后:短剧出海版权保护的技术实现与实战策略
大数据·人工智能
阿瑞说项目管理6 小时前
2026 实战入门指南:企业 Agent 到底能解决哪些工作问题?
大数据·人工智能·agent·智能体·企业级ai