首页主机资讯Hadoop在Linux中如何实现高可用

Hadoop在Linux中如何实现高可用

时间2025-12-16 23:55:03发布访客分类主机资讯浏览978
导读: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/StandbyResourceManager,通过ZooKeeper保存状态与选主,避免单点故障。
  • 数据与计算层DataNode/NodeManager多节点分布,保证数据与应用的高可用与弹性。
  • 典型端口:ZooKeeper 2181JournalNode 8485NameNode RPC 8020NameNode HTTP 50070

二 环境准备与基础配置

  • 基础环境
    • 至少准备3台Linux主机(建议5台以上用于生产:NN×2、ZK×3、JN×3、DN/NM若干),安装相同版本JavaHadoop,配置主机名解析免密SSH(用于ZKFC fencing与运维)。
    • 建议关闭防火墙/SELinux或放行相关端口,确保节点间互通
  • 系统优化(生产推荐)
    • 降低交换倾向:vm.swappiness=0;内存分配策略:vm.overcommit_memory=2vm.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
    • hdfs-site.xml(HA)
      • 启用命名服务与双NN:
        • dfs.nameservices=mycluster
        • dfs.ha.namenodes.mycluster=nn1,nn2
        • dfs.namenode.rpc-address.mycluster.nn1=nn1:8020dfs.namenode.rpc-address.mycluster.nn2=nn2:8020
        • dfs.namenode.http-address.mycluster.nn1=nn1:50070dfs.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
    • 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=rm1yarn.resourcemanager.hostname.rm2=rm2
        • yarn.resourcemanager.zk-address=zk1:2181,zk2:2181,zk3:2181
      • 计算调度基础:
        • yarn.nodemanager.aux-services=mapreduce_shuffle
  • 分发与初始化
    • 将配置同步到所有节点;首次部署按顺序:
      1. 启动所有JournalNode
      2. nn1执行:hdfs namenode -format
      3. nn1初始化共享编辑日志:hdfs namenode -initializeSharedEdits
      4. nn2同步元数据:hdfs namenode -bootstrapStandby
      5. 初始化ZKFC元数据:hdfs zkfc -formatZK
      6. 启动HDFS:start-dfs.sh;启动YARN:start-yarn.sh
      7. 在nn1/nn2上分别启动ZKFC进程(或使用start-dfs.sh自动拉起)

四 验证与运维

  • 状态与健康检查
    • HDFS:
      • 查看NN状态:hdfs haadmin -getServiceState nn1hdfs haadmin -getServiceState nn2
      • 查看集群报告:hdfs dfsadmin -report
    • YARN:
      • 查看RM状态页(Active/Standby):http://rm1:8088http://rm2:8088
      • 节点列表:yarn node -list
  • 故障转移测试
    • 模拟故障:在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),并规划机架感知与磁盘均衡。
  • 安全加固:启用KerberosTLS防火墙白名单,限制ZKJN访问。
  • 升级与变更:遵循滚动升级灰度发布策略,变更前做好备份与回滚预案。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Hadoop在Linux中如何实现高可用
本文地址: https://pptw.com/jishu/773380.html
Linux下Hadoop性能如何监控 Hadoop集群Linux系统如何维护

游客 回复需填写必要信息