📄【Hadoop HA 高可用集群部署完整文档】(最终校正版)
有关Notion安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
✅ 适配比赛要求:root用户、绝对路径、三节点(master/slave1/slave2) ✅ 包含全流程:环境准备、免密登录、Zookeeper HA、Hadoop HA、服务启停、进程查看、功能测试(jps + MapReduce) ✅ 命令可执行:所有命令可直接复制粘贴,已在模拟环境中验证。 ✅ 截图位置明确:每个截图任务都有清晰指引,确保提交内容符合要求。 ✅ 新增【任务6】:MapReduce 计算任务测试,确保集群真正可用! ✅ 关键修正:调整 hdfs zkfc -formatZK 执行顺序,添加 yarn.nodemanager.vmem-pmem-ratio=4.0 解决虚拟内存超限问题。
🖥️ 环境说明
项目 | 说明 |
用户 | root(所有操作均使用 root) |
节点 | master、slave1、slave2 |
安装包路径 | /opt/software/(需提前从宿主机复制) |
解压路径 | /opt/module/ |
Hadoop 版本 | hadoop-3.1.3 |
JDK 版本 | jdk-8u212-linux-x64 |
Zookeeper 版本 | apache-zookeeper-3.5.7-bin |
网络配置 | 确保节点间网络互通, /etc/hosts 配置正确。 |
✅ 任务1:复制安装包并解压
在 Master 节点执行
1.1 创建目录
⚠️ 前提假设: 宿主机已通过 docker cp 命令将 hadoop-3.1.3.tar.gz、jdk-8u212-linux-x64.tar.gz、apache-zookeeper-3.5.7-bin.tar.gz 三个文件复制到容器内 /opt/software/ 目录下。
1.2 解压安装包
📌 请将以下两条命令复制粘贴至【Release\模块A提交结果.docx】→ 任务1下:
注:Zookeeper 解压命令未在任务1要求中,故不在此处粘贴。
1.3 关闭防火墙 (可选,根据环境决定)
✅ 任务2:配置 hosts、免密登录、JDK 环境变量、分发 JDK
在 Master 节点操作,部分命令需在 slave1/slave2 执行
2.1 配置 hosts(三节点均执行)
确保节点间可以通过主机名互相访问。
💡 验证: 在任一节点执行 ping slave1 和 ping slave2,应能正常连通。
2.2 配置 SSH 免密登录(仅在 Master 操作)
实现从
master 到 master, slave1, slave2 的免密登录。❗ 重要: 如果 ssh-copy-id 命令不存在,可手动复制:
2.3 配置全局环境变量(三节点均执行)
编辑
/etc/profile 文件。在文件末尾追加以下内容:
使环境变量立即生效:
✅ 验证: 执行 echo $JAVA_HOME 和 echo $HADOOP_HOME,应能正确输出路径。
2.4 分发 JDK 和环境变量到 slave1、slave2
在 Master 节点上,将配置好的 JDK 和
/etc/profile 文件分发到 slave1 和 slave2。然后分别登录 slave1 和 slave2,执行 source /etc/profile 使配置生效。
2.5 在 Master 执行并截图
在 Master 节点上执行以下命令,验证JDK是否配置成功。
📌 截图粘贴至【Release\模块A提交结果.docx】→ 任务2下
截图要求: 包含完整的命令行和输出结果。
✅ 任务3:配置 Zookeeper 集群,查看 Leader
三节点分别配置
3.1 配置 zoo.cfg(在 Master 节点操作)
在
zoo.cfg 文件中,修改或添加以下配置:3.2 创建 myid 文件
在 Master 节点上:
在 Slave1 节点上:
在 Slave2 节点上:
3.3 分发 Zookeeper(在 Master 节点操作)
重要: 分发后,请在 slave1 和 slave2 上再次执行 source /etc/profile,确保 ZK_HOME 环境变量生效。
3.4 启动 Zookeeper 集群(三节点分别执行)
3.5 查看 Zookeeper 状态(在任意节点执行)
📌 找到输出中包含 “Mode: leader” 的节点,将该节点的命令及执行结果截图,粘贴至【Release\模块A提交结果.docx】→ 任务3下。
截图要求: 清晰显示 Mode: leader 字样。
✅ 任务4:配置 Hadoop HA,启动集群,查看 nn2 与 rm2
所有配置在 Master 节点的 $HADOOP_HOME/etc/hadoop/ 目录下进行,完成后分发。
4.1 核心配置文件
进入配置目录:
➤ core-site.xml
➤ hdfs-site.xml
➤ yarn-site.xml
➤ mapred-site.xml
➤ hadoop-env.sh
在文件中添加或确保有以下两行:
➤ workers 文件
4.2 分发 Hadoop 配置(在 Master 节点操作)
4.3 启动 Hadoop HA 集群(严格按顺序执行!)
① 启动 JournalNode(在 master, slave1, slave2 三节点执行)
② 格式化 NameNode(在 Master 节点执行)
③ 初始化 HA 在 Zookeeper 中的状态(在 Master 节点执行)
❗ 关键修正点:此步骤必须在启动任何 NameNode 之前执行!
④ 启动 nn1(在 Master 节点执行)
⑤ 同步元数据并启动 nn2(在 Slave1 节点执行)
⑥ 启动所有 DataNode(在 master, slave1, slave2 三节点执行)
⑦ 启动 ZKFC(在 Master 和 Slave1 节点执行)
⑧ 启动 YARN(在 Master 节点执行)
说明: start-yarn.sh 会根据配置在 master 启动 rm1,在 slave1 启动 rm2。
4.4 在 Master 查看 nn2 与 rm2 状态
在 Master 节点上,通过 SSH 登录到
slave1 查看其上的进程。📌 截图命令及结果(需包含
NameNode 和 ResourceManager 进程),粘贴至【Release\模块A提交结果.docx】→ 任务4下截图要求: 清晰显示 NameNode 和 ResourceManager 进程ID。
✅ 任务5:在 slave1 节点使用 jps 查看服务进程
直接在 Slave1 节点上执行
jps 命令。📌 截图命令及完整输出,粘贴至【Release\模块A提交结果.docx】→ 任务5下
预期进程: NameNode, DataNode, JournalNode, DFSZKFailoverController, ResourceManager, NodeManager
✅ 任务6(新增):集群功能测试验证
在 Master 节点执行,验证集群真正可用
6.1 运行 MapReduce 计算任务(核心验证!)
✅ 正常输出结尾应类似:
📌 请将该命令及完整输出结果截图(特别是最后几行包含 Pi 值的结果),粘贴至【Release\模块A提交结果.docx】→ 任务6下
重要: 如果任务执行过程中出现 Container is running beyond the 'VIRTUAL' memory limit 错误,请确认 yarn-site.xml 中 yarn.nodemanager.vmem-pmem-ratio 是否已设置为 4.0,并已重启 YARN 服务。
6.2 (可选)HDFS 读写测试
无报错即通过。
6.3 (可选)查看 HA 状态
应输出 active / standby。
6.4 新增:单词统计 (WordCount) 测试
此测试将创建一个包含单词的文本文件,上传到HDFS,并运行WordCount程序统计词频,以全面验证MapReduce的完整流程。
✅ 预期输出:
📌 请将
hdfs dfs -cat /wordcount/output/part-r-00000 命令及完整输出结果截图,粘贴至【Release\模块A提交结果.docx】→ 任务6下说明: 此测试比Pi计算更复杂,它涉及文件读取、Map阶段的分词、Shuffle阶段的数据传输、Reduce阶段的聚合,能更有效地验证集群的健壮性。
📸 最终截图提交清单(【Release\模块A提交结果.docx】)
任务编号 | 截图内容 | 关键要求 |
任务1 | 两条解压命令(文本粘贴) | 纯文本,无需截图 |
任务2 | java -version 和 javac -version 命令输出 | 包含完整命令行和版本信息 |
任务3 | zkServer.sh status 输出(Leader 节点) | 清晰显示 Mode: leader |
任务4 | ssh slave1 jps 输出 | 必须包含 NameNode 和 ResourceManager |
任务5 | 在 slave1 执行 jps 的完整输出 | 显示所有关键进程 |
任务6 | hadoop jar ... pi 10 10 命令及完整输出 | 包含 “Job Finished” 和 “Estimated value of Pi” |
🚨 故障排查与附加建议
常见问题
jps命令无输出或进程缺失:- 检查环境变量
$JAVA_HOME是否配置正确。 - 检查对应服务的日志文件,路径为
$HADOOP_HOME/logs/。
- NameNode 无法启动:
- 检查
hdfs-site.xml中的端口配置(8020, 9870)是否冲突。 - 如果是重新部署,先删除数据目录
rm -rf /opt/module/hadoop-3.1.3/data/*,然后重新格式化。
- ZKFC 无法启动/自动故障转移失败:
- 确保 Zookeeper 集群已启动且状态正常。
- 确保
hdfs zkfc -formatZK已在启动 NameNode 之前执行。 - 检查
hdfs-site.xml中dfs.ha.fencing.ssh.private-key-files路径是否正确,且已配置免密登录。
- MapReduce 任务失败 (虚拟内存超限):
- 确认
yarn-site.xml中已配置yarn.nodemanager.vmem-pmem-ratio=4.0。 - 修改配置后,必须重启 YARN 服务 (
stop-yarn.sh->start-yarn.sh)。
附加建议
- Web UI 验证:
- HDFS:
http://master:9870或http://slave1:9870(取决于哪个是Active) - YARN:
http://master:8088或http://slave1:8088(取决于哪个是Active RM)
- 时间同步(重要!): 在所有节点执行,避免因时间不同步导致的奇怪错误。
- 日志查看:
所有服务的日志都在
$HADOOP_HOME/logs/目录下,出错时第一时间查看对应日志。
🏁 总结
本方案经过全面优化与校正:
- 逻辑更清晰:步骤按启动顺序重组,避免因顺序错误导致失败。
- 命令更准确:修正了过时的启动命令和关键配置。
- 指导更明确:增加了大量提示和验证步骤,降低操作门槛。
- 稳定性更强:预置了解决虚拟内存超限的配置,确保MapReduce任务稳定运行。
✅ 照此操作,您将获得一个稳定、高可用、且经过功能验证的Hadoop集群,为后续的Hive、Spark、Flink等模块打下坚实基础!
祝您比赛顺利,取得满分成绩! 🚀💯
- 作者:神秘人
- 链接:https://blog.tianjiaji.top//url/276183c0-6139-806d-864c-f3c0ee112cad
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。










