如何搭建Centos8上的高可用Hadoop集群?

摘要:以下是基于 CentOS 8 搭建高可用 Hadoop 集群的完整操作流程及命令,涵盖 6 台主机的规划、部署步骤和高可用(HA)配置。结合 Hadoop 3.x 官方文档和最佳实践整理: 先决条件 硬件规划 6 台 CentOS 8 主机
以下是基于 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 文档。