Lazy loaded image
Hadoop HA 高可用集群部署完整文档
字数 3472阅读时长 9 分钟
2025-9-22
2025-9-22

📄【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)
节点
masterslave1slave2
安装包路径
/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 操作)

实现从 mastermaster, slave1, slave2 的免密登录。
❗ 重要: 如果 ssh-copy-id 命令不存在,可手动复制:

2.3 配置全局环境变量(三节点均执行)

编辑 /etc/profile 文件。
在文件末尾追加以下内容:
使环境变量立即生效
✅ 验证: 执行 echo $JAVA_HOME 和 echo $HADOOP_HOME,应能正确输出路径。

2.4 分发 JDK 和环境变量到 slave1、slave2

Master 节点上,将配置好的 JDK 和 /etc/profile 文件分发到 slave1slave2
然后分别登录 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(在 MasterSlave1 节点执行)

⑧ 启动 YARN(在 Master 节点执行)

说明: start-yarn.sh 会根据配置在 master 启动 rm1,在 slave1 启动 rm2。

4.4 在 Master 查看 nn2 与 rm2 状态

Master 节点上,通过 SSH 登录到 slave1 查看其上的进程。
📌 截图命令及结果(需包含 NameNodeResourceManager 进程),粘贴至【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 -versionjavac -version 命令输出
包含完整命令行和版本信息
任务3
zkServer.sh status 输出(Leader 节点)
清晰显示 Mode: leader
任务4
ssh slave1 jps 输出
必须包含 NameNodeResourceManager
任务5
在 slave1 执行 jps 的完整输出
显示所有关键进程
任务6
hadoop jar ... pi 10 10 命令及完整输出
包含 “Job Finished” 和 “Estimated value of Pi”

🚨 故障排查与附加建议

常见问题

  1. jps 命令无输出或进程缺失
      • 检查环境变量 $JAVA_HOME 是否配置正确。
      • 检查对应服务的日志文件,路径为 $HADOOP_HOME/logs/
  1. NameNode 无法启动
      • 检查 hdfs-site.xml 中的端口配置(8020, 9870)是否冲突。
      • 如果是重新部署,先删除数据目录 rm -rf /opt/module/hadoop-3.1.3/data/*,然后重新格式化。
  1. ZKFC 无法启动/自动故障转移失败
      • 确保 Zookeeper 集群已启动且状态正常。
      • 确保 hdfs zkfc -formatZK 已在启动 NameNode 之前执行。
      • 检查 hdfs-site.xmldfs.ha.fencing.ssh.private-key-files 路径是否正确,且已配置免密登录。
  1. MapReduce 任务失败 (虚拟内存超限)
      • 确认 yarn-site.xml 中已配置 yarn.nodemanager.vmem-pmem-ratio=4.0
      • 修改配置后,必须重启 YARN 服务 (stop-yarn.sh -> start-yarn.sh)。

附加建议

  • Web UI 验证
    • HDFS: http://master:9870http://slave1:9870 (取决于哪个是Active)
    • YARN: http://master:8088http://slave1:8088 (取决于哪个是Active RM)
  • 时间同步(重要!): 在所有节点执行,避免因时间不同步导致的奇怪错误。
    • 日志查看: 所有服务的日志都在 $HADOOP_HOME/logs/ 目录下,出错时第一时间查看对应日志。

    🏁 总结

    本方案经过全面优化与校正:
    • 逻辑更清晰:步骤按启动顺序重组,避免因顺序错误导致失败。
    • 命令更准确:修正了过时的启动命令和关键配置。
    • 指导更明确:增加了大量提示和验证步骤,降低操作门槛。
    • 稳定性更强:预置了解决虚拟内存超限的配置,确保MapReduce任务稳定运行。
    照此操作,您将获得一个稳定、高可用、且经过功能验证的Hadoop集群,为后续的Hive、Spark、Flink等模块打下坚实基础!
    祝您比赛顺利,取得满分成绩! 🚀💯
    上一篇
    配置 Zookeeper 集群
    下一篇
    🐍 Python函数高阶三剑客:闭包·装饰器·Lambda

    评论
    Loading...
    目录