无单点故障:Hadoop HA 架构设计与最佳实践

张开发
2026/4/16 17:24:14 15 分钟阅读

分享文章

无单点故障:Hadoop HA 架构设计与最佳实践
一、引言HAHigh Availability高可用的核心目标是保证集群能够7×24 小时不间断提供服务确保业务稳定运行。在原生 Hadoop 架构中NameNode 仅部署单个实例而 DataNode 为多节点集群。一旦唯一的 NameNode 发生故障整个 HDFS 将无法对外服务形成典型的单点故障问题同样YARN 中的 ResourceManager 也存在类似风险。为解决 NameNode 单点故障通常采用 ZooKeeper 集群搭建 Hadoop 高可用架构。其基本思路是启动两台 NameNode以主从模式运行一台作为主节点对外提供服务另一台作为备用节点待命。若两台 NameNode 同时处于工作状态会引发脑裂现象导致集群元数据不一致甚至服务异常。不同组件实现高可用的方式各有差异ZooKeeper 通过多节点互备实现高可用MySQL 依靠主从复制保障高可用而 Hadoop 则采用主备切换模式。在正式搭建 Hadoop 高可用集群之前为避免配置失误造成集群损坏需要先对现有环境进行快照备份为后续操作提供安全保障。二、搭建namenode的高可用1.免密登录配置与工具安装在hadoop12节点执行以下命令完成SSH免密登录配置ssh-keygen -t rsa ssh-copy-id hadoop11 ssh-copy-id hadoop12 ssh-copy-id hadoop13安装psmisc工具用于ZKFC远程管理NameNode进程在hadoop11节点执行xcall yum install -y psmisc若出现yum源异常可通过以下命令修复curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo2.环境准备与清理确保所有节点已安装JDK和ZooKeeper。若之前部署过Hadoop需先清理环境stop-all.sh xcall rm -rf /opt/installs/hadoop3.1.4/data /opt/installs/hadoop3.1.4/logs/3.核心配置文件修改hadoop-env.sh配置指定JDK路径及运行用户配置完成后需同步至其他节点export JAVA_HOME/opt/installs/jdk1.8 export HDFS_NAMENODE_USERroot export HDFS_DATANODE_USERroot export HDFS_SECONDARYNAMENODE_USERroot export YARN_RESOURCEMANAGER_USERroot export YARN_NODEMANODE_USERroot export HDFS_JOURNALNODE_USERroot export HDFS_ZKFC_USERrootcore-site.xml配置configuration property namehadoop.tmp.dir/name value/opt/installs/hadoop3.1.4/data/value /property property namefs.defaultFS/name valuehdfs://hdfs-cluster/value /property property nameha.zookeeper.quorum/name valuehadoop11:2181,hadoop12:2181,hadoop13:2181/value /property /configurationhdfs-site.xml配置configuration property namedfs.replication/name value3/value /property property namedfs.nameservices/name valuehdfs-cluster/value /property property namedfs.ha.namenodes.hdfs-cluster/name valuenn1,nn2/value /property !-- 其余配置内容保持不变 -- /configuration4.集群初始化与启动流程启动ZooKeeper集群zk.sh start首次搭建时初始化ZKFC节点在hadoop11执行hdfs zkfc -formatZK启动JournalNode服务所有节点执行xcall hdfs --daemon start journalnode格式化NameNode在hadoop11执行hdfs namenode -format启动HDFS集群start-dfs.sh初始化并启动备用NameNode在hadoop12执行hdfs namenode -bootstrapStandby hdfs --daemon start namenode5.环境重置操作清除ZK中HA节点数据zkCli.sh deleteall /hadoop-ha清理所有节点数据xcall rm -rf /opt/installs/journalnode/data/ xcall rm -rf /opt/installs/hadoop3.1.4/data/ /opt/installs/hadoop3.1.4/logs/6.状态验证与测试通过Web界面访问hadoop11:9870和hadoop12:9870确认NameNode主备状态。测试故障转移功能hdfs --daemon stop namenode观察备用节点自动切换为Active状态原主节点恢复后会自动变为Standby。三、搭建resourcemanager的高可用1.配置文件检查与修改检查mapred-site.xml文件确保仅包含YARN及HistoryServer相关配置。若存在其他无关配置需移除或注释掉。修改yarn-site.xml文件保留原有YARN及日志服务配置新增RM高可用相关配置。以下为关键配置示例property nameyarn.resourcemanager.ha.enabled/name valuetrue/value /property property nameyarn.resourcemanager.cluster-id/name valuecluster1/value /property property nameyarn.resourcemanager.ha.rm-ids/name valuerm1,rm2/value /property使用同步工具如myscp将修改后的mapred-site.xml和yarn-site.xml同步至集群所有节点确保配置一致。2.启动YARN集群执行启动命令start-yarn.sh拉起YARN相关服务。若为首次启动需分别在两个RM节点上手动启动ResourceManageryarn --daemon start resourcemanager3.RM主备状态查看通过以下命令查看RM节点的主备状态yarn rmadmin -getAllServiceState正常输出应显示一个节点为active另一个为standby。例如hadoop11:8033 active hadoop12:8033 standby4.RM高可用测试停止当前active节点的RM服务yarn --daemon stop resourcemanager再次执行状态检查命令确认原standby节点已自动切换为active原active节点显示连接失败。重启原active节点的RM服务yarn --daemon start resourcemanager验证其自动恢复为standby状态且不会抢占当前active节点。5.高可用YARN集群验证提交WordCount任务测试集群可用性hadoop jar /path/to/hadoop-mapreduce-examples.jar wordcount /input/path /output/path通过Web界面访问验证直接访问active节点的Web界面如http://bigdata02:8088/。尝试访问standby节点界面确认会自动跳转到active节点页面。6.注意事项确保ZooKeeper服务正常运行RM高可用依赖ZK进行状态管理。检查防火墙设置确保节点间通信端口如8033、8088等未被阻塞。定期监控RM日志排查潜在问题。

更多文章