Hadoop在Linux中如何实现高可用
导读:Hadoop在Linux上的高可用实现 一 架构与组件 NameNode HA:部署Active/Standby双NameNode,借助ZooKeeper进行选主与状态协调,使用QJM(Quorum Journal Manager)共享编...
Hadoop在Linux上的高可用实现
一 架构与组件
- NameNode HA:部署Active/Standby双NameNode,借助ZooKeeper进行选主与状态协调,使用QJM(Quorum Journal Manager)共享编辑日志(端口8485),并由**ZKFC(ZooKeeper Failover Controller)**监控健康状态、执行自动故障转移与隔离(fencing)。
- YARN HA:部署Active/Standby双ResourceManager,通过ZooKeeper保存状态与选主,避免单点故障。
- 数据与计算层:DataNode/NodeManager多节点分布,保证数据与应用的高可用与弹性。
- 典型端口:ZooKeeper 2181、JournalNode 8485、NameNode RPC 8020、NameNode HTTP 50070。
二 环境准备与基础配置
- 基础环境
- 至少准备3台Linux主机(建议5台以上用于生产:NN×2、ZK×3、JN×3、DN/NM若干),安装相同版本的Java与Hadoop,配置主机名解析与免密SSH(用于ZKFC fencing与运维)。
- 建议关闭防火墙/SELinux或放行相关端口,确保节点间互通。
- 系统优化(生产推荐)
- 降低交换倾向:vm.swappiness=0;内存分配策略:vm.overcommit_memory=2、vm.overcommit_ratio=50。
- 网络与文件句柄:net.core.somaxconn=65535;limits.conf 设置nofile/nproc=524288。
- 存储与内核:noatime,nodiratime挂载选项;关闭THP(Transparent Huge Pages)。
三 关键配置步骤
- 规划示例(可按需调整)
- ZooKeeper:zk1/zk2/zk3(端口2181)
- JournalNode:jn1/jn2/jn3(端口8485)
- NameNode:nn1/nn2(RPC 8020,HTTP 50070)
- ResourceManager:rm1/rm2(端口8088)
- 核心配置示例
- core-site.xml
- 设置默认文件系统与ZK地址:
- fs.defaultFS=hdfs://mycluster
- ha.zookeeper.quorum=zk1:2181,zk2:2181,zk3:2181
- 设置默认文件系统与ZK地址:
- hdfs-site.xml(HA)
- 启用命名服务与双NN:
- dfs.nameservices=mycluster
- dfs.ha.namenodes.mycluster=nn1,nn2
- dfs.namenode.rpc-address.mycluster.nn1=nn1:8020,dfs.namenode.rpc-address.mycluster.nn2=nn2:8020
- dfs.namenode.http-address.mycluster.nn1=nn1:50070,dfs.namenode.http-address.mycluster.nn2=nn2:50070
- 共享编辑日志(QJM):
- dfs.namenode.shared.edits.dir=qjournal://jn1:8485; jn2:8485; jn3:8485/mycluster
- dfs.journalnode.edits.dir=/data/hadoop/journal
- 客户端故障转移与隔离:
- dfs.client.failover.proxy.provider.mycluster=org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
- dfs.ha.automatic-failover.enabled=true
- dfs.ha.fencing.methods=sshfence(示例)
- dfs.ha.fencing.ssh.private-key-files=/home/hadoop/.ssh/id_rsa
- 启用命名服务与双NN:
- yarn-site.xml(HA)
- 启用RM HA:
- yarn.resourcemanager.ha.enabled=true
- yarn.resourcemanager.cluster-id=yarn1
- yarn.resourcemanager.ha.rm-ids=rm1,rm2
- yarn.resourcemanager.hostname.rm1=rm1,yarn.resourcemanager.hostname.rm2=rm2
- yarn.resourcemanager.zk-address=zk1:2181,zk2:2181,zk3:2181
- 计算调度基础:
- yarn.nodemanager.aux-services=mapreduce_shuffle
- 启用RM HA:
- core-site.xml
- 分发与初始化
- 将配置同步到所有节点;首次部署按顺序:
- 启动所有JournalNode
- 在nn1执行:hdfs namenode -format
- 在nn1初始化共享编辑日志:hdfs namenode -initializeSharedEdits
- 在nn2同步元数据:hdfs namenode -bootstrapStandby
- 初始化ZKFC元数据:hdfs zkfc -formatZK
- 启动HDFS:start-dfs.sh;启动YARN:start-yarn.sh
- 在nn1/nn2上分别启动ZKFC进程(或使用start-dfs.sh自动拉起)
- 将配置同步到所有节点;首次部署按顺序:
四 验证与运维
- 状态与健康检查
- HDFS:
- 查看NN状态:hdfs haadmin -getServiceState nn1、hdfs haadmin -getServiceState nn2
- 查看集群报告:hdfs dfsadmin -report
- YARN:
- 查看RM状态页(Active/Standby):http://rm1:8088、http://rm2:8088
- 节点列表:yarn node -list
- HDFS:
- 故障转移测试
- 模拟故障:在Active NameNode上执行kill -9 < NN_PID> 或停止进程;验证Standby自动切换为Active。
- 观察ZKFC日志与HDFS/YARN Web UI,确认切换完成且服务可用。
- 常见问题与要点
- 隔离(fencing)必须配置(如sshfence),避免脑裂;确保SSH免密与超时合理。
- JournalNode需奇数台(≥3),写入需多数派确认,提升可靠性。
- 首次部署务必按顺序初始化(JN → format → initializeSharedEdits → bootstrapStandby → zkfc -formatZK)。
五 生产增强建议
- 监控与告警:接入Prometheus/Ganglia等,监控ZK、NN、RM、JN、DN/NM关键指标与JVM状态,配置阈值告警。
- 容量与副本:根据业务设置dfs.replication(常见3),并规划机架感知与磁盘均衡。
- 安全加固:启用Kerberos、TLS与防火墙白名单,限制ZK与JN访问。
- 升级与变更:遵循滚动升级与灰度发布策略,变更前做好备份与回滚预案。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Hadoop在Linux中如何实现高可用
本文地址: https://pptw.com/jishu/773380.html
