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

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

相关推荐
存在morning1 天前
【GO语言开发实践】二 GO 并发快速上手
大数据·开发语言·golang
nassi_1 天前
对AI工程问题的一些思考
大数据·人工智能·hadoop
沪漂阿龙1 天前
面试题详解:检索链路设计全攻略——RAG 检索架构、查询理解、多路召回、混合检索、Rerank、上下文构造与评估闭环
大数据·人工智能·架构
金融小师妹1 天前
基于AI通胀预期模型与美元流动性监测框架的黄金6周新低行分析:美元五连涨周期下贵金属定价机制重构研究
大数据·人工智能·重构·逻辑回归·线性回归
Jackyzhe1 天前
从零学习Kafka:消费者组重平衡
分布式·学习·kafka
智慧医养结合软件开源1 天前
智慧养老系统医生管理模块:专业赋能,筑牢老人诊疗安全防线
大数据·人工智能·安全·生活
海南java第二人1 天前
ClickHouse 部署模式完全指南:从单机到分布式集群的生产级选型
分布式·clickhouse
身如柳絮随风扬1 天前
Git 核心操作:rebase 与 merge 的区别,以及分支管理最佳实践
大数据·git
多年小白1 天前
兆易创新分析
大数据·人工智能·ai·金融·区块链
财迅通Ai1 天前
海立股份:公司旗下海立特冷“人体降温系统”入选市级先进技术推荐目录
大数据·人工智能·海立股份