以下是基于 CentOS 8 搭建高可用 Hadoop 集群的完整操作流程及命令,涵盖 6 台主机的规划、部署步骤和高可用(HA)配置。结合 Hadoop 3.x 官方文档和最佳实践整理:
先决条件
硬件规划
6 台 CentOS 8 主机(物理机或虚拟机),每台建议配置:
4GB+ 内存,50GB+ 磁盘
静态 IP(示例规划):
主机名
IP 地址
角色分配
node1
192.168.1.101
NameNode + ZKFC + JournalNode
node2
192.168.1.102
NameNode + ZKFC + JournalNode
node3
192.168.1.103
ResourceManager + JournalNode
node4
192.168.1.104
DataNode + NodeManager
node5
192.168.1.105
DataNode + NodeManager
node6
192.168.1.106
DataNode + NodeManager
服务说明:
JournalNode:存储 HA 状态(至少 3 台)
ZKFC(ZooKeeper Failover Controller):监控 NameNode 状态38
软件要求
Java JDK 1.8+(推荐 OpenJDK)
Hadoop 3.3.4+(官网下载)
ZooKeeper 3.6.3+(用于 HA 仲裁)810
一、基础环境配置(所有节点执行)
1. 网络与主机名
bash
# 设置静态 IP(以 node1 为例)
sudo nmcli con mod ens33 ipv4.addresses 192.168.1.101/24 ipv4.gateway 192.168.1.1 ipv4.dns "8.8.8.8" ipv4.method manual
sudo nmcli con up ens33
# 修改主机名
sudo hostnamectl set-hostname node1
# 配置 hosts 映射(所有节点相同)
sudo vi /etc/hosts
## 添加以下内容:
192.168.1.101 node1
192.168.1.102 node2
192.168.1.103 node3
192.168.1.104 node4
192.168.1.105 node5
192.168.1.106 node6
2. 关闭防火墙与 SELinux
bash
sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo setenforce 0
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
3. 安装 JDK
bash
sudo dnf install java-1.8.0-openjdk-devel -y
echo 'export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk' | sudo tee -a /etc/profile
source /etc/profile
4. 配置 SSH 免密登录
bash
# 所有节点生成密钥
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
# 在 node1 上汇总公钥并分发
ssh-copy-id node1
ssh-copy-id node2
... # 依次操作所有节点
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys node2:~/.ssh/ # 复制到其他节点
二、Hadoop 安装与 HA 配置
1. 解压 Hadoop 到所有节点
bash
# 在 node1 操作
tar -zxvf hadoop-3.3.4.tar.gz -C /opt
sudo mv /opt/hadoop-3.3.4 /opt/hadoop
# 分发到其他节点
scp -r /opt/hadoop node2:/opt/
... # 重复至 node6
2. 配置环境变量(所有节点)
bash
echo 'export HADOOP_HOME=/opt/hadoop' | sudo tee -a /etc/profile
echo 'export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' | sudo tee -a /etc/profile
source /etc/profile
3. 修改 Hadoop 配置文件($HADOOP_HOME/etc/hadoop/)
core-site.xml- 定义全局 HA 访问点
xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value> <!-- HA 逻辑名 -->
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>node1:2181,node2:2181,node3:2181</value> <!-- ZK 集群 -->
</property>
</configuration>
hdfs-site.xml- 配置 HA 和 JournalNode
xml
<property>
<name>dfs.nameservices</name>
<value>mycluster</value> <!-- 与 core-site 一致 -->
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value> <!-- 两个 NameNode ID -->
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>node1:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>node2:8020</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node1:8485;node2:8485;node3:8485/mycluster</value> <!-- JournalNode -->
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/hadoop/journal</value> <!-- JN 数据目录 -->
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value> <!-- 启用自动故障转移 -->
</property>
workers- 指定 DataNode
plaintext
node4
node5
node6
yarn-site.xml- 配置 YARN HA
xml
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yarn-cluster</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>node3</value> <!-- RM 主节点 -->
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>node4</value> <!-- RM 备节点 -->
</property>
三、启动高可用集群
1. 启动 ZooKeeper(node1~node3)
bash
# 在 ZK 节点上
zkServer.sh start
2. 启动 JournalNode(node1~node3)
bash
hdfs --daemon start journalnode
3. 格式化并启动 NameNode HA
bash
# 在 node1 上格式化(首次)
hdfs namenode -format
hdfs zkfc -formatZK # 在 ZK 中初始化 HA 状态
# 启动 node1 的 NameNode
hdfs --daemon start namenode
# 在 node2 上同步元数据
hdfs namenode -bootstrapStandby
# 启动所有服务
start-dfs.sh # 启动 HDFS 集群
start-yarn.sh # 启动 YARN 集群
四、验证高可用功能
检查服务状态
bash
hdfs haadmin -getServiceState nn1 # 应返回 active
yarn rmadmin -getServiceState rm1 # 应返回 active
模拟故障转移
bash
# 手动杀死 active NameNode
kill -9 <NameNode_PID>
# 30秒内 ZKFC 应自动切换备节点为 active
hdfs haadmin -getServiceState nn2 # 验证是否变为 active
Web UI 访问
NameNode:http://node1:9870
ResourceManager:http://node3:8088
五、关键运维命令
功能
命令示例
手动切换 NameNode
hdfs haadmin -failover nn1 nn2
查看 JournalNode 状态
hdfs dfsadmin -report
修复数据块
hdfs fsck / -delete
添加新节点
将新主机加入workers并重启集群
注意:
所有配置文件修改后需同步到集群所有节点(可用scp分发)18。
高可用下需确保JournalNode 和 ZK 服务奇数节点存活(至少 3 台)310。
生产环境建议配置Kerberos 认证和磁盘 RAID提升安全性。
完整操作流程参考:Hadoop 官方 HA 文档。
如何搭建Centos8上的高可用Hadoop集群?
摘要:以下是基于 CentOS 8 搭建高可用 Hadoop 集群的完整操作流程及命令,涵盖 6 台主机的规划、部署步骤和高可用(HA)配置。结合 Hadoop 3.x 官方文档和最佳实践整理: 先决条件 硬件规划 6 台 CentOS 8 主机
