Hadoop3.3.6 HDFS‑HA+YARN‑HA 高可用集群实战教程
实验环境总规划
| 主机名 | IP 地址 | 操作系统 | 核心实验角色 |
|---|---|---|---|
| node1 | 192.168.52.161 | CentOS 7 | Hadoop NameNode、ResourceManager、NFS 服务端、SecondaryNameNode |
| node2 | 192.168.52.162 | CentOS 7 | HDFS DataNode、YARN NodeManager |
| node3 | 192.168.52.163 | CentOS 7 | HDFS DataNode、YARN NodeManager |
| node4 | 192.168.52.164 | CentOS 7 | 动态扩容:DataNode、YARN NodeManager |
软件版本清单
| 组件 | 版本说明 |
|---|---|
| Hadoop | hadoop‑3.3.6(本地模式、伪分布式、完全分布式) |
| JDK | jdk‑8u181 |
| 服务工具 | nfs‑utils、openssh‑server、jps |
Hadoop‑3.3.6 本地模式、伪分布式、NFS共享完全分布式HDFS+YARN集群部署
浏览器访问 https://dlcdn.apache.org/hadoop/common/
(注释:访问Apache官方Hadoop软件下载站点)
点击 hadoop-3.3.6/
(注释:进入3.3.6版本软件包目录)
选择 hadoop-3.3.6.tar.gz 点击下载
(注释:下载Hadoop3.3.6二进制程序压缩包)
开启CentOS 虚拟机node1
(注释:启动node1虚拟机,作为初始部署节点)
虚拟机node1
vim /etc/hosts
192.168.52.161 node1
192.168.52.162 node2
192.168.52.163 node3
192.168.52.164 node4
192.168.52.165 node5
(注释:配置集群主机名解析,集群内部使用主机名通信)
useradd hadoop
(注释:创建hadoop普通运行用户,Hadoop不建议使用root账号运行)
passwd hadoop
(注释:设置hadoop用户登录密码)
cd /home/hadoop
(注释:进入hadoop用户家目录,存放程序压缩包)
将文件hadoop-3.3.6.tar.gz 移入虚拟机node1
(注释:上传Hadoop二进制压缩包到虚拟机)
将文件 jdk-8u181-linux-x64.tar.gz移入虚拟机node1
(注释:上传JDK8压缩包,Hadoop依赖JDK8运行环境)
su - hadoop
(注释:切换至hadoop普通用户执行部署操作)
ls
(注释:校验两个压缩包已经上传成功)
tar zxf hadoop-3.3.6.tar.gz
(注释:解压hadoop程序压缩包)
tar zxf jdk-8u181-linux-x64.tar.gz
(注释:解压jdk8压缩包)
ll
(注释:查看解压生成的目录)
ln -s hadoop-3.3.6 hadoop
(注释:创建软链接,简化目录名称,后续统一使用hadoop访问目录)
ln -s jdk-8u181 jdk
(注释:jdk目录创建软链接)
ll
(注释:校验软链接创建完成)
cd jdk
ls
cd bin
ls
pwd
(注释:确认jdk二进制工具所在路径)
cd
(注释:返回hadoop用户家目录)
vim .bash_profile
PATH=$(PATH:)$HOME/bin:/home/hadoop/jdk/bin
(注释:修改用户环境变量,将jdk/bin加入PATH环境变量)
source .bash_profile
(注释:加载bash配置文件,jdk环境变量立即生效)
cd hadoop
ls
cd etc
ls
cd hadoop
ls
cat workers
(注释:查看workers配置文件,workers记录DataNode数据节点主机列表)
vim hadoop-env.sh
:54
:/JAVA_HOME
export JAVA_HOME=/home/hadoop/jdk
(注释:hadoop‑env.sh内部配置Hadoop识别的JAVA_HOME环境变量)
cd ~/hadoop
ls
bin/hadoop
(注释:验证hadoop主程序可以正常执行)
mkdir input
(注释:本地创建input测试目录,用于本地模式运行示例MR程序)
ls
cp etc/hadoop/*.xml input
(注释:复制hadoop配置xml文件作为MR任务测试输入数据)
ls input
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar
(注释:查看hadoop内置mapreduce示例程序jar包)
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar grep input output 'dfs[a-z.]+'
(注释:本地模式运行grep示例MapReduce任务)
cd output
ls
cat *
(注释:查看grep任务输出结果)
cd ~/hadoop
ls
cd etc/hadoop
vim core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
(注释:core‑site.xml伪分布式配置,设置HDFS默认文件系统地址localhost)
vim hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
(注释:hdfs‑site.xml伪分布式配置,HDFS数据副本数设置为1)
ssh-keygen
(注释:hadoop用户生成ssh公私密钥对,实现本机免密登录)
ssh-copy-id localhost
(注释:推送公钥,实现本机ssh免密)
ssh localhost
logout
(注释:测试本机免密登录,测试完成退出ssh会话)
cd ~/hadoop
ls
ls /tmp
bin/hdfs namenode -format
(注释:格式化HDFS NameNode元数据,**仅首次部署执行,重复执行会丢失全部HDFS数据**)
2026-08-21 20:56:55,485 INFO common.Storage: Storage directory /tmp/hadoop-hadoop/dfs/name has been successfully formatted.
(注释:namenode格式化成功输出日志)
sbin/start-dfs.sh
(注释:启动伪分布式HDFS集群)
logout
jps
(注释:jps查看java进程,确认namenode、datanode、secondarynamenode进程正常启动)
netstat -antlp
(注释:查看系统端口监听,校验HDFS各组件端口)
浏览器访问 192.168.52.161:9870
(注释:访问HDFS伪分布式WebUI管理页面,端口9870)
点击Overview
(注释:查看HDFS集群概览信息)
点击Datanodes
(注释:查看数据节点状态信息)
点击Utilities 点击Browse the file system
(注释:WebUI浏览HDFS分布式文件系统)
cd ~/hadoop
bin/hdfs dfs -mkdir /user
(注释:在HDFS分布式文件系统创建/user根目录)
浏览器访问 192.168.52.161:9870
点击Utilities 点击Browse the file system
点击Go! 即可查看到 user目录
(注释:WebUI校验/user目录创建成功)
bin/hdfs dfs -mkdir /user/hadoop
(注释:HDFS创建hadoop用户的家目录/user/hadoop)
浏览器访问 192.168.52.161:9870
点击Utilities 点击Browse the file system
点击Go! 点击user目录 点击hadoop目录
bin/hdfs dfs -ls
(注释:查看HDFS根目录下文件与目录)
bin/hdfs dfs -mkdir input
(注释:在/user/hadoop下创建input测试输入目录)
浏览器访问 192.168.52.161:9870
点击Utilities 点击Browse the file system
点击Go! 点击input目录
bin/hdfs dfs -put etc/hadoop/*.xml input
(注释:将本地hadoop配置xml文件上传至HDFS input目录)
bin/hdfs dfs -ls input
(注释:查看HDFS input目录内文件列表)
浏览器访问 192.168.52.161:9870
点击Utilities 点击Browse the file system
点击Go! 查看input目录里面的文件
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount input output
(注释:运行wordcount词频统计MapReduce任务,读取HDFS input数据,输出结果至HDFS output)
bin/hdfs dfs -cat output/*
(注释:读取HDFS上wordcount任务输出结果)
浏览器访问 192.168.52.161:9870
点击Utilities 点击Browse the file system
点击Go! 回退到 /user/hadoop 会出现一个 output 目录 点击output目录
ls
rm -rf output
(注释:删除本地磁盘旧output目录)
ls
bin/hdfs dfs -get output
(注释:将HDFS上output目录下载到本地磁盘)
cd output
ls
cat *
(注释:查看下载到本地的wordcount运行结果)
cd ..
rm -rf output
(注释:删除本地下载得到的output目录)
浏览器访问 192.168.52.161:9870
点击Utilities 点击Browse the file system
处在 /user/hadoop/output 路径下 点击Go!
文件不会消失
(注释:dfs‑get仅下载文件到本地,不会删除HDFS集群内的原文件)
cd ~/hadoop
sbin/stop-dfs.sh
(注释:停止伪分布式HDFS集群,准备切换为完全分布式模式)
jps
(注释:校验HDFS相关java进程全部停止)
开启新的CentOS 虚拟机node2 node3
(注释:启动node2、node3两台虚拟机,作为完全分布式的数据节点)
虚拟机node2
hostnamectl set-hostname node2
(注释:修改node2主机名)
nmcli connection modify ens33
ipv4.method manual
ipv4.addresses 192.168.52.162/24
ipv4.gateway 192.168.52.2
ipv4.dns "114.114.114.114"
(注释:配置node2静态IP、网关、DNS)
nmcli connection up ens33
(注释:激活网卡,网络配置生效)
vim /etc/hosts
192.168.52.161 node1
192.168.52.162 node2
192.168.52.163 node3
192.168.52.164 node4
192.168.52.165 node5
(注释:node2写入全集群主机名解析)
虚拟机node3
hostnamectl set-hostname node3
(注释:修改node3主机名)
nmcli connection modify ens33
ipv4.method manual
ipv4.addresses 192.168.52.163/24
ipv4.gateway 192.168.52.2
ipv4.dns "114.114.114.114"
(注释:配置node3静态网络参数)
nmcli connection up ens33
(注释:激活网卡配置)
vim /etc/hosts
192.168.52.161 node1
192.168.52.162 node2
192.168.52.163 node3
192.168.52.164 node4
192.168.52.165 node5
(注释:node3写入集群hosts主机解析)
虚拟机node1
切换为root
timedatectl
(注释:查看node1系统时间,集群节点要求时间保持同步)
yum install -y nfs-utils
(注释:安装NFS服务端工具,通过NFS共享/home/hadoop目录,多节点共用一套hadoop程序)
systemctl enable --now nfs
(注释:设置nfs服务开机自启并且立即启动)
虚拟机node2
timedatectl
(注释:查看node2系统时间)
yum install -y nfs-utils
(注释:node2安装NFS客户端工具)
systemctl enable --now nfs
(注释:启动nfs客户端服务)
虚拟机node3
timedatectl
(注释:查看node3系统时间)
yum install -y nfs-utils
(注释:node3安装NFS客户端工具)
systemctl enable --now nfs
(注释:启动nfs客户端服务)
虚拟机node1
vim /etc/exports
/home/hadoop *(rw,sync,anonuid=1000,anongid=1000)
(注释:NFS导出配置,共享/home/hadoop目录,映射uid/gid,保证客户端权限正常)
showmount -e
(注释:查看本机NFS对外共享列表)
node2 node3 也应该有同样 uid gid 的hadoop用户
(注释:node2、node3本地hadoop用户uid、gid必须与node1保持一致,避免NFS权限异常)
虚拟机node2
useradd hadoop
(注释:node2创建hadoop运行用户)
passwd hadoop
(注释:设置hadoop用户密码)
id hadoop
(注释:查看hadoop用户uid、gid,与node1核对)
虚拟机node3
useradd hadoop
(注释:node3创建hadoop运行用户)
passwd hadoop
(注释:设置hadoop用户密码)
id hadoop
(注释:查看uid、gid,做一致性核对)
虚拟机node2
showmount -e node1
(注释:查询node1对外提供的NFS共享)
mount 192.168.52.161:/home/hadoop /home/hadoop
(注释:挂载node1的NFS共享目录到本地/home/hadoop)
df
(注释:df命令校验挂载是否成功)
ll -d /home/hadoop
(注释:查看挂载目录权限属性)
虚拟机node3
showmount -e node1
(注释:查询node1 NFS共享)
mount 192.168.52.161:/home/hadoop /home/hadoop
(注释:node3挂载NFS共享目录)
df
(注释:校验挂载成功)
ll -d /home/hadoop
(注释:查看挂载目录权限)
虚拟机node2
su - hadoop
ls
(注释:切换hadoop用户,验证NFS目录访问正常)
虚拟机node3
su - hadoop
ls
(注释:切换hadoop用户,确认NFS目录可访问)
虚拟机node1
su - hadoop
ls
ssh node1
logout
ssh node2
logout
ssh node3
logout
(注释:hadoop用户测试集群所有节点ssh免密登录,Hadoop启停脚本依赖ssh免密)
cd hadoop
ls
cd etc
ls
cd hadoop
ls
vim core-site.xml
修改这一行内容
<value>hdfs://node1:9000</value>
(注释:core‑site完全分布式配置,HDFS地址修改为主机名node1,不再使用localhost)
vim hdfs-site.xml
修改这一行内容
<value>2</value>
(注释:hdfs‑site修改副本数为2,完全分布式多副本存储)
vim workers
修改为
node2
node3
(注释:workers配置文件,写入DataNode数据节点主机名列表)
cd ~/hadoop
ls
bin/hdfs namenode -format
(注释:完全分布式环境格式化NameNode元数据)
sbin/start-dfs.sh
(注释:启动完全分布式HDFS集群)
jps
(注释:node1执行jps,查看NameNode、SecondaryNameNode进程)
虚拟机node2
jps
(注释:node2查看jps,校验DataNode进程正常启动)
虚拟机node3
jps
(注释:node3查看jps,校验DataNode进程正常启动)
浏览器访问192.168.52.161:9870
刷新页面
点击Overview
下滑 找到 Live Nodes
点击可以查看到 192.168.52.162:9866 node2 192.168.52.163:9866 node3
(注释:HDFS WebUI查看存活DataNode数据节点)
点击Utilties
点击Logs
(注释:WebUI查看集群各节点运行日志)
点击Utilties
点击Metrics
(注释:查看HDFS集群性能指标)
点击Utilties
点击Network Topology
(注释:查看机架网络拓扑信息)
点击Utilties
点击Browse the file system
(注释:WebUI浏览HDFS文件系统)
虚拟机node1
bin/hdfs dfs -mkdir /user
(注释:HDFS创建/user根目录)
bin/hdfs dfs -mkdir /user/hadoop
(注释:创建/user/hadoop用户目录)
bin/hdfs dfs -mkdir input
(注释:HDFS创建input测试目录)
bin/hdfs dfs -put etc/hadoop/*.xml input
(注释:上传本地xml配置文件到HDFS input目录)
浏览器访问192.168.52.161:9870
刷新页面
点击user 点击hadoop 点击input
可以看到Replication 是2
(注释:WebUI查看文件副本数为2,完全分布式副本策略生效)
点击文件 可以看到是 node2 node3
(注释:查看该文件副本实际存放的两个DataNode节点)
虚拟机node1
vim etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>
(注释:mapred‑site.xml配置,指定MapReduce运行调度框架为YARN,配置MR程序类路径)
vim etc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
(注释:yarn‑site配置,开启mapreduce_shuffle服务,配置NodeManager环境变量白名单)
sbin/start-yarn.sh
(注释:启动YARN资源调度集群)
jps
(注释:node1查看jps,确认ResourceManager进程启动)
虚拟机node2
jps
(注释:node2查看jps,确认NodeManager进程启动)
虚拟机node3
jps
(注释:node3查看jps,确认NodeManager进程启动)
开启新虚拟机node4
hostnamectl set-hostname node4
(注释:设置node4主机名,用于集群动态扩容)
nmcli connection modify ens33
ipv4.method manual
ipv4.addresses 192.168.52.164/24
ipv4.gateway 192.168.52.2
ipv4.dns "114.114.114.114"
(注释:配置node4静态IP、网关、DNS)
nmcli connection up ens33
(注释:激活网卡配置)
vim /etc/hosts
192.168.52.161 node1
192.168.52.162 node2
192.168.52.163 node3
192.168.52.164 node4
192.168.52.165 node5
(注释:node4写入集群hosts主机解析)
timedatectl
(注释:查看node4系统时间,集群全部节点时间需要同步)
yum install -y nfs-utils
(注释:node4安装NFS客户端工具)
systemctl enable --now nfs
(注释:启动NFS客户端服务)
四台虚拟机保证时间同步
(注释:实验硬性要求node1‑node4集群节点系统时间保持一致)
虚拟机node4
useradd hadoop
(注释:node4创建hadoop运行用户)
passwd hadoop
(注释:设置hadoop用户密码)
mount 192.168.52.161:/home/hadoop /home/hadoop
(注释:挂载node1的NFS共享hadoop家目录)
df
(注释:校验挂载成功)
ll -d /home/hadoop
(注释:查看挂载目录权限)
su - hadoop
ls
(注释:切换hadoop用户,验证NFS目录访问)
ssh node1
logout
ssh node4
logout
(注释:测试本机ssh免密登录)
cd hadoop
ls
vim etc/hadoop/workers
node2
node3
node4
(注释:workers配置文件追加node4,将node4纳入DataNode节点列表)
bin/hdfs --daemon start datanode
(注释:单独后台守护进程方式启动DataNode,动态扩容HDFS数据节点)
bin/yarn --daemon start nodemanager
(注释:单独后台启动NodeManager,动态加入YARN集群)
jps
(注释:node4执行jps,校验DataNode、NodeManager进程正常运行)
浏览器访问192.168.52.161:9870
刷新页面
点击Overview
下滑 找到 Live Nodes
点击可以查看到
192.168.52.162:9866 node2
192.168.52.163:9866 node3
192.168.52.164:9866 node4
(注释:HDFS WebUI查看,node4已经作为存活DataNode加入集群)
浏览器访问192.168.52.161:8088
(注释:访问YARN ResourceManager WebUI,8088端口,查看NodeManager节点状态)
模块思路总结
1. 实验目的:掌握Hadoop‑3.3.6三种运行模式:本地模式、伪分布式、NFS共享方式快速搭建完全分布式HDFS+YARN集群;掌握HDFS WebUI、YARN WebUI使用;运行wordcount示例MapReduce任务;掌握集群动态扩容DataNode与NodeManager;理解workers节点配置、副本数、ssh免密、NFS共享部署方案。
2. 实现逻辑:下载Hadoop与JDK8,创建hadoop普通运行用户;本地模式运行grep示例MR程序;修改core‑site、hdfs‑site配置完成伪分布式部署,格式化并启动HDFS,WebUI操作HDFS文件系统,运行wordcount任务;准备node2、node3虚拟机,配置静态网络、hosts解析;node1部署NFS服务共享/home/hadoop目录,node2、node3挂载NFS共享;修改完全分布式core‑site、hdfs‑site、workers配置;格式化、启动HDFS;配置mapred‑site、yarn‑site,启动YARN资源调度;新增node4虚拟机,挂载NFS共享,修改workers,使用‑‑daemon单独启动datanode、nodemanager实现集群动态扩容;通过WebUI校验HDFS、YARN集群节点状态。
3. 核心知识点:Hadoop三种运行模式;HDFS组件NameNode、DataNode、SecondaryNameNode;YARN组件ResourceManager、NodeManager;workers文件定义DataNode节点;dfs.replication数据副本数;NameNode格式化只允许执行一次;集群节点ssh免密是启停脚本依赖;NFS共享目录适合实验快速部署Hadoop集群;HDFS WebUI端口9870,YARN WebUI端口8088;daemon方式单独启动组件实现动态扩容;集群所有节点时间必须同步。
4. 实操思路:NFS共享适合教学实验快速搭建集群,生产环境各节点独立部署Hadoop程序包;NameNode格式化会清空元数据,禁止反复执行;副本数量不能超过实际DataNode节点数量;动态扩容新数据节点无需重启整个集群,单独启动对应进程即可;集群所有节点必须保证ssh免密、系统时间同步。
实验环境总规划
| 主机名 | IP 地址 | 操作系统 | 核心实验角色 |
|---|---|---|---|
| node1 | 192.168.52.161 | CentOS 7 | NameNode (h1 主)、ResourceManager (rm1 主)、NFS 服务端 |
| node2 | 192.168.52.162 | CentOS 7 | DataNode、JournalNode、Zookeeper 节点 1 (myid=1) |
| node3 | 192.168.52.163 | CentOS 7 | DataNode、JournalNode、Zookeeper 节点 2 (myid=2) |
| node4 | 192.168.52.164 | CentOS 7 | DataNode、JournalNode、Zookeeper 节点 3 (myid=3) |
| node5 | 192.168.52.165 | CentOS 7 | NameNode (h2 备)、ResourceManager (rm2 备) |
软件版本清单
| 组件 | 版本说明 |
|---|---|
| Hadoop | hadoop‑3.3.6(普通完全分布式 + HDFS‑HA (QJM)+YARN‑HA) |
| JDK | jdk‑8u181 |
| Zookeeper | apache‑zookeeper‑3.8.6‑bin |
| 工具 | nfs‑utils、openssh‑server、jps |
Zookeeper三节点集群+HDFS‑HA(QJM)+YARN‑HA完整高可用集群实验
开启虚拟机 node1 node2 node3 node4
(注释:启动4台实验虚拟机,node1作为h1主namenode;node2‑node4部署zk、journalnode、datanode)
虚拟机node1
systemctl status nfs
(注释:查看node1的NFS服务状态,NFS实现多节点共享hadoop程序目录)
su - hadoop
(注释:切换hadoop普通用户执行hadoop集群操作)
ls
cd hadoop
(注释:进入hadoop程序主目录)
ls
sbin/start-yarn.sh
(注释:启动YARN资源调度集群)
sbin/start-dfs.sh
(注释:启动HDFS文件系统集群)
jps
(注释:jps查看java进程,校验HDFS、YARN组件启动状态)
虚拟机node2
systemctl status nfs
(注释:查看本机nfs客户端服务状态)
mount 192.168.52.161:/home/hadoop /home/hadoop
(注释:挂载node1的NFS共享hadoop家目录)
df
(注释:df校验挂载是否成功)
su - hadoop
(注释:切换hadoop用户)
ls
jps
(注释:查看node2上hadoop相关java进程)
虚拟机node3
systemctl status nfs
(注释:查看本机nfs客户端服务状态)
mount 192.168.52.161:/home/hadoop /home/hadoop
(注释:挂载NFS共享目录)
df
(注释:校验挂载)
su - hadoop
(注释:切换hadoop用户)
ls
jps
(注释:查看hadoop进程)
虚拟机node4
systemctl status nfs
(注释:查看本机nfs客户端服务状态)
mount 192.168.52.161:/home/hadoop /home/hadoop
(注释:挂载NFS共享)
df
(注释:校验挂载)
su - hadoop
(注释:切换hadoop用户)
ls
jps
(注释:查看hadoop进程)
虚拟机node1
cd ~/hadoop
sbin/stop-all.sh
(注释:stop‑all.sh停止HDFS+YARN全部hadoop集群服务,准备改造HA集群)
jps
(注释:确认hadoop相关进程全部关闭)
rm -fr /tmp/*
(注释:清理/tmp临时目录旧元数据文件)
虚拟机node2
jps
(注释:确认node2上hadoop进程已经全部停止)
rm -fr /tmp/*
(注释:清理本地tmp临时目录)
虚拟机node3
jps
(注释:确认node3上hadoop进程全部停止)
rm -fr /tmp/*
(注释:清理本地tmp临时目录)
虚拟机node4
jps
(注释:确认node4上hadoop进程全部停止)
rm -fr /tmp/*
(注释:清理本地tmp临时目录)
开启虚拟机node5
(注释:新增node5虚拟机,作为第二NameNode h2、第二ResourceManager rm2备节点)
hostnamectl set-hostname node5
(注释:设置node5主机名)
nmcli connection modify ens33
ipv4.method manual
ipv4.addresses 192.168.52.165/24
ipv4.gateway 192.168.52.2
ipv4.dns 114.114.114.114
connection.autoconnect yes
(注释:配置node5静态IP、网关、DNS,开机自动连接网卡)
nmcli connection up ens33
(注释:激活网卡,网络配置生效)
vim /etc/hosts
192.168.52.161 node1
192.168.52.162 node2
192.168.52.163 node3
192.168.52.164 node4
192.168.52.165 node5
(注释:写入全集群hosts主机解析,集群内部使用主机名通信)
yum install -y nfs-utils
(注释:node5安装nfs客户端工具)
systemctl enable --now nfs
(注释:nfs客户端开机自启,立即启动)
useradd hadoop
(注释:node5创建hadoop运行用户)
ll -d /home/hadoop
(注释:查看hadoop家目录属性)
mount 192.168.52.161:/home/hadoop /home/hadoop
(注释:挂载node1的NFS共享hadoop家目录)
df
(注释:df校验NFS挂载成功)
虚拟机node5
su - hadoop
(注释:切换hadoop普通用户)
cd
(注释:进入hadoop家目录)
将文件 apache-zookeeper-3.8.6-bin.tar.gz 移入MobabXterm虚拟机node5
(注释:上传zookeeper二进制压缩包至node5)
或
wget [https://archive.apache.org/dist/zookeeper/zookeeper-3.8.6/apache-zookeeper-3.8.6-bin.tar.gz](https://archive.apache.org/dist/zookeeper/zookeeper-3.8.6/apache-zookeeper-3.8.6-bin.tar.gz)
(注释:备选,网络下载zookeeper压缩包)
ls
tar zxf apache-zookeeper-3.8.6-bin.tar.gz
(注释:解压zookeeper程序包)
虚拟机node2
cd
ls
cd apache-zookeeper-3.8.6-bin
(注释:进入zookeeper解压目录)
ls
cd conf
(注释:进入zookeeper配置目录)
ls
cp zoo_sample.cfg zoo.cfg
(注释:复制样本配置文件生成zoo.cfg主配置)
ls
vim zoo.cfg
文件末尾添加内容
server.1=192.168.52.162:2888:3888
server.2=192.168.52.163:2888:3888
server.3=192.168.52.164:2888:3888
(注释:zookeeper集群配置;2888集群节点通信端口,3888选举端口)
mkdir /tmp/zookeeper
(注释:创建zookeeper数据存储目录)
echo 1 > /tmp/zookeeper/myid
(注释:写入myid,node2编号1,必须和配置server编号一一对应)
cd ~/apache-zookeeper-3.8.6-bin
ls
bin/zkServer.sh start
(注释:启动zookeeper服务)
bin/zkServer.sh status
(注释:查看zk节点角色 leader/follower)
jps
(注释:jps校验QuorumPeerMain进程,zookeeper主进程)
QuorumPeerMain
虚拟机node3
mkdir /tmp/zookeeper
(注释:创建zk数据目录)
echo 2 > /tmp/zookeeper/myid
(注释:myid写入2,对应配置server.2)
cd ~/apache-zookeeper-3.8.6-bin
ls
bin/zkServer.sh start
(注释:启动zookeeper)
bin/zkServer.sh status
(注释:查看zk集群角色状态)
jps
(注释:校验QuorumPeerMain进程)
QuorumPeerMain
虚拟机node4
mkdir /tmp/zookeeper
(注释:创建zk数据目录)
echo 3 > /tmp/zookeeper/myid
(注释:myid写入3,对应配置server.3)
cd ~/apache-zookeeper-3.8.6-bin
ls
bin/zkServer.sh start
(注释:启动zookeeper服务)
bin/zkServer.sh status
(注释:查看zk节点状态)
jps
(注释:校验QuorumPeerMain进程)
QuorumPeerMain
虚拟机node1
cd ~/hadoop/etc/hadoop
vim core-site.xml
修改原有内容 并 添加新内容
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://masters</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>192.168.52.162:2181,192.168.52.163:2181,192.168.52.164:2181</value>
</property>
</configuration>
(注释:core‑site配置HDFS逻辑集群名masters;指定zookeeper集群地址,用于HA自动故障切换)
vim hdfs-site.xml
修改原有内容 并 添加新内容
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>masters</value>
</property>
<property>
<name>dfs.ha.namenodes.masters</name>
<value>h1,h2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.masters.h1</name>
<value>192.168.52.161:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.masters.h1</name>
<value>192.168.52.161:9870</value>
</property>
<property>
<name>dfs.namenode.rpc-address.masters.h2</name>
<value>192.168.52.165:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.masters.h2</name>
<value>192.168.52.165:9870</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://192.168.52.162:8485;192.168.52.163:8485;192.168.52.164:8485/masters</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/tmp/journaldata</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.masters</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>
(注释:hdfs‑site配置HDFS‑HA;h1(node1)、h2(node5)双namenode;QJM journalnode三节点;sshfence隔离+shell兜底;开启自动故障切换,副本数3)
启动hdfs集群(按顺序启动)
1)确认启动zookeeper集群(node2、node3、node4)
jps
QuorumPeerMain
(注释:检查三台zk节点QuorumPeerMain进程必须存在,zk集群正常运行)
2)在三个DN上依次启动journalnode(第一次启动hdfs必须先启动journalnode)
cd ~/hadoop
bin/hdfs --daemon start journalnode
(注释:node2 node3 node4分别执行,后台启动journalnode共享编辑日志进程)
jps
JournalNode
(注释:校验JournalNode进程启动)
3)格式化HDFS集群
虚拟机node1
cd ~/hadoop
bin/hdfs namenode -format
(注释:格式化h1(node1)namenode元数据,HA环境仅执行一次)
ll -d /tmp/hadoop-hadoop
(注释:查看格式化生成的namenode元数据目录)
Namenode数据默认存放在/tmp,需要把数据拷贝到h2
scp -r /tmp/hadoop-hadoop node5:/tmp
(注释:把h1格式化元数据拷贝至node5备节点)
虚拟机node5
cd /tmp
ll
(注释:校验元数据目录已经拷贝到node5)
4)格式化zookeeper (只需在h1上执行即可)
虚拟机node1
bin/hdfs zkfc -formatZK
(注释:在zookeeper中格式化HA故障切换锁znode,只执行一次)
5)启动hdfs集群(只需在h1上执行即可)
虚拟机node1
sbin/start-dfs.sh
(注释:启动全部datanode,同时启动zkfc故障切换守护进程)
jps
NameNode
DFSZKFailoverController
(注释:node1查看进程,namenode、DFSZKFailoverController必须存在)
6)查看各节点状态
虚拟机node1
jps
NameNode
DFSZKFailoverController
Jps
虚拟机node5
jps
NameNode
DFSZKFailoverController
Jps
虚拟机node2
jps
JournalNode
QuorumPeerMain
DataNode
Jps
虚拟机node3
jps
Jps
QuorumPeerMain
DataNode
JournalNode
虚拟机node4
jps
Jps
QuorumPeerMain
DataNode
JournalNode
虚拟机node1
cd ~/hadoop
hdfs haadmin -getAllServiceState
(注释:haadmin工具查看两个namenode运行状态active/standby)
浏览器访问 192.168.52.161:9870
(注释:访问h1的HDFS webUI,查看标题Overview 'node1:9000' (active))
下滑 点击 Live Nodes
(注释:查看是否识别出三个datanode存活节点)
浏览器访问 192.168.52.165:9870
(注释:访问h2的HDFS webUI,查看标题Overview 'node5:9000' (standby))
下滑 点击 Live Nodes
(注释:查看是否识别出三个datanode存活节点)
浏览器访问 192.168.52.161:9870
点击Utilties 点击Browse Directory
(注释:浏览HDFS文件系统,此时集群目录为空)
虚拟机node1
cd ~/hadoop
bin/hdfs dfs -mkdir /user
(注释:HDFS创建/user根目录)
bin/hdfs dfs -mkdir /user/hadoop
(注释:创建hadoop用户家目录)
bin/hdfs dfs -put input
(注释:上传本地input测试目录到HDFS)
浏览器访问 192.168.52.161:9870
点击Utilties 点击Browse Directory
刷新网页
点击 user 点击hadoop 点击input
点击文件 可以看到 有三个节点
(注释:webUI查看文件副本分布在3个datanode)
虚拟机node2
cd
cd apache-zookeeper-3.8.6-bin
ls
bin/zkCli.sh
(注释:zk客户端连接zk集群)
ls /
(注释:查看zk根路径znode)
ls /hadoop-ha
(注释:查看hdfs‑ha集群根znode)
ls /hadoop-ha/masters
(注释:查看masters集群内部znode)
get /hadoop-ha/masters/ActiveBreadCrumb
(注释:读取ActiveBreadCrumb记录,查看当前active的namenode)
mastersh1node1
虚拟机node1
jps
查看NameNode 的PID
kill -9 NameNode 的PID
(注释:强制杀死active namenode进程,模拟主namenode故障)
jps
(注释:确认node1的namenode进程消失)
浏览器访问 192.168.52.161:9870
刷新页面 访问失败
(注释:原active节点webUI无法访问)
浏览器访问 192.168.52.165:9870
刷新页面
查看标题
Overview 'node5:9000' (active)
(注释:ZKFC自动故障切换,node5的h2升级为active)
下滑 点击 Live Nodes
查看是否有三个节点
点击Utilties 点击Browse Directory
点击 user 点击hadoop 点击input
点击文件 可以看到 有三个节点
(注释:故障切换后HDFS业务读写正常,数据完整)
虚拟机node1
cd ~/hadoop
bin/hdfs dfs -ls input
(注释:客户端访问HDFS,验证切换后业务可用)
虚拟机node2
cd apache-zookeeper-3.8.6-bin
bin/zkCli.sh
get /hadoop-ha/masters/ActiveBreadCrumb
(注释:zk中查看,active记录更新为mastersh2node5)
mastersh2node5
虚拟机node1
cd ~/hadoop
bin/hdfs --daemon start namenode
(注释:恢复node1的namenode进程,自动进入standby待命)
jps
浏览器访问 192.168.52.161:9870
刷新页面
查看标题
Overview 'node1:9000' (standby)
(注释:原主节点恢复后作为备节点运行,不会抢占active)
yarn高可用配置
虚拟机node1
cd ~/hadoop/etc/hadoop
vim mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>
(注释:mapred‑site配置MR计算框架使用yarn资源调度)
vim yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME</value>
</property>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>RM_CLUSTER</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>node1</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>node5</value>
</property>
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>192.168.52.162:2181,192.168.52.163:2181,192.168.52.164:2181</value>
</property>
</configuration>
(注释:yarn‑site开启YARN‑HA;rm1(node1) rm2(node5)双resourcemanager;使用zookeeper存储RM状态,实现自动故障切换)
启动yarn服务
虚拟机node1
cd ~/hadoop
sbin/start-yarn.sh
(注释:启动YARN‑HA集群,node1、node5拉起两个ResourceManager;node2‑node4拉起NodeManager)
jps
Jps
NameNode
DFSZKFailoverController
ResourceManager
(注释:node1查看ResourceManager进程)
虚拟机node5
jps
NameNode
Jps
DFSZKFailoverController
ResourceManager
(注释:node5查看ResourceManager进程)
虚拟机node2
ZooKeeperMain
JournalNode
Jps
QuorumPeerMain
NodeManager
DataNode
(注释:node2查看NodeManager、DataNode、zk进程)
虚拟机node3
ZooKeeperMain
JournalNode
Jps
QuorumPeerMain
NodeManager
DataNode
(注释:node3查看NodeManager、DataNode、zk进程)
虚拟机node4
ZooKeeperMain
JournalNode
Jps
QuorumPeerMain
NodeManager
DataNode
(注释:node4查看NodeManager、DataNode、zk进程)
虚拟机node1
bin/yarn rmadmin -getAllServiceState
(注释:rmadmin查看两个ResourceManager active/standby状态)
虚拟机node2
cd
cd apache-zookeeper-3.8.6-bin
ls
bin/zkCli.sh
ls /
(注释:查看zk根znode)
ls /yarn-leader-election/RM_CLUSTER
(注释:查看YARN‑HA选举znode)
get /yarn-leader-election/RM_CLUSTER/ActiveBreadCrumb
(注释:读取RM的active记录)
get /yarn-leader-election/RM_CLUSTER/ActiveStandbyElectorLock
(注释:查看主备选举锁znode)
浏览器访问192.168.52.161:8088
点击About
(注释:访问rm1的YARN webUI,查看RM角色)
浏览器访问192.168.52.165:8088
点击About
(注释:访问rm2的YARN webUI,查看RM角色)
测试yarn故障切换
node1 node5 哪个是master 在哪台虚拟机上操作
虚拟机node1
jps
查看ResourceManager的PID
kill -9 ResourceManager的PID
(注释:杀死active状态rm1,模拟主ResourceManager故障)
虚拟机node2
bin/zkCli.sh
get /yarn-leader-election/RM_CLUSTER/ActiveBreadCrumb
get /yarn-leader-election/RM_CLUSTER/ActiveStandbyElectorLock
(注释:zk中观察leader选举记录发生变化)
浏览器访问192.168.52.161:8088
刷新页面 访问失败
(注释:原主RM webUI不可访问)
浏览器访问192.168.52.165:8088
刷新页面 点击About
(注释:rm2自动升级为active)
稍后手动恢复rm
虚拟机node1
cd ~/hadoop
bin/yarn --daemon start resourcemanager
(注释:恢复rm1进程,自动进入standby备角色)
浏览器访问192.168.52.161:8088
刷新页面 点击About
浏览器访问192.168.52.165:8088
刷新页面 点击About
虚拟机node1
cd ~/hadoop
sbin/stop-yarn.sh
sbin/stop-dfs.sh
jps
logout
rm -fr /tmp/*
(注释:停止HDFS YARN,清理临时文件)
虚拟机node2
cd
cd apache-zookeeper-3.8.6-bin
bin/zkServer.sh stop
(注释:停止zookeeper服务)
jps
logout
rm -fr /tmp/*
umount /home/hadoop
df
(注释:卸载NFS共享目录)
虚拟机node3
cd
cd apache-zookeeper-3.8.6-bin
bin/zkServer.sh stop
jps
logout
rm -fr /tmp/*
umount /home/hadoop
df
虚拟机node4
cd
cd apache-zookeeper-3.8.6-bin
bin/zkServer.sh stop
jps
logout
rm -fr /tmp/*
umount /home/hadoop
df
虚拟机node5
logout
rm -fr /tmp/*
umount /home/hadoop
df
虚拟机node1
systemctl disable --now nfs
(注释:关闭nfs服务)
userdel -r hadoop
(注释:删除hadoop实验用户)
df
模块思路总结
1. 实验目的:搭建Zookeeper三节点集群;完成HDFS‑HA(QJM)双NameNode高可用、YARN‑HA双ResourceManager高可用;掌握QJM共享edits日志;ZKFC自动故障转移;模拟NameNode、ResourceManager故障,验证自动切换;实验完成后环境清理。
2. 实现逻辑:准备5台虚拟机,NFS共享hadoop程序;部署node2‑node4 Zookeeper集群,配置myid;修改core‑site、hdfs‑site配置HDFS‑HA;按顺序启动journalnode → 格式化nn1 → 拷贝元数据到备节点node5 → zkfc‑formatZK初始化zk切换锁 → start‑dfs拉起HDFS‑HA;测试kill‑9模拟主NN故障,观察自动切换;修改mapred‑site、yarn‑site开启YARN‑HA;start‑yarn启动双RM;kill‑9模拟主RM故障验证YARN自动切换;最后停止全部集群服务,卸载NFS,清理实验环境。
3. 核心知识点:Zookeeper集群myid编号、leader/follower;HDFS‑HA QJM journalnode共享编辑日志;dfs.nameservices逻辑集群名;bootstrapStandby元数据同步;ZKFC守护进程监控实现自动故障切换;sshfence隔离机制;YARN‑HA利用Zookeeper保存RM状态;ActiveBreadCrumb、ActiveStandbyElectorLock znode记录主备角色;实验环境收尾清理。
4. 实操思路:Zookeeper集群节点数量选择奇数保证quorum;QJM journalnode至少3个节点;HA启停顺序严格:先启动zk,再启动journalnode,再启动namenode;故障恢复旧主节点自动作为standby,不会抢占active;生产环境不要使用NFS共享部署hadoop,各节点独立部署程序;生产必须保留stonith隔离,不能单纯shell兜底。
更多推荐

所有评论(0)