温馨提示×

Ubuntu Hadoop 高可用性怎么配置

小樊
45
2026-01-03 10:31:16
栏目: 智能运维

Ubuntu Hadoop 高可用配置步骤

一 架构与前置准备

  • 架构要点
    • HDFS HA:使用 QJM(Quorum Journal Manager) 共享编辑日志,至少部署 3 台 JournalNode;两台 NameNode(Active/Standby) 通过 ZooKeeper + ZKFC 实现自动故障转移。
    • YARN HA:部署两台 ResourceManager,启用 ZKRMStateStore 持久化状态,实现 Active/Standby 自动切换。
  • 节点规划示例(可按需增减 DataNode/NodeManager)
    • node1:NameNode1、ZooKeeper、JournalNode、ResourceManager1
    • node2:NameNode2、ZooKeeper、JournalNode、ResourceManager2
    • node3:DataNode、ZooKeeper、JournalNode、NodeManager
    • node4:DataNode、NodeManager
  • 前置条件
    • Ubuntu 20.04/22.04JDK 1.8Hadoop 2.7.x/3.xZooKeeper 3.4.x/3.5.x+
    • 完成 /etc/hosts 主机名映射、SSH 免密登录(主备 NN 需能互相免密)、关闭防火墙或放通端口(如 8020/50070/8088/2181/8485)。

二 核心配置

  • 环境变量(所有节点)
    • ~/.bashrc/etc/profile 中设置:
      • export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
      • export HADOOP_HOME=/opt/hadoop
      • export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  • core-site.xml(所有节点)
    • 关键项:指定 nameserviceZooKeeper 地址临时目录
      • fs.defaultFShdfs://mycluster
      • hadoop.tmp.dir/opt/hadoop/data
      • ha.zookeeper.quorumnode1:2181,node2:2181,node3:2181
  • hdfs-site.xml(所有节点)
    • 关键项:启用 HA、配置 QJMZKFCfencing
      • dfs.nameservicesmycluster
      • dfs.ha.namenodes.myclusternn1,nn2
      • dfs.namenode.rpc-address.mycluster.nn1node1:8020
      • dfs.namenode.rpc-address.mycluster.nn2node2:8020
      • dfs.namenode.http-address.mycluster.nn1node1:50070
      • dfs.namenode.http-address.mycluster.nn2node2:50070
      • dfs.namenode.shared.edits.dirqjournal://node1:8485;node2:8485;node3:8485/mycluster
      • dfs.journalnode.edits.dir/opt/hadoop/journal
      • dfs.client.failover.proxy.provider.myclusterorg.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
      • dfs.ha.automatic-failover.enabledtrue
      • dfs.ha.fencing.methodssshfence
      • dfs.ha.fencing.ssh.private-key-files/root/.ssh/id_rsa
      • dfs.ha.fencing.ssh.connect-timeout30000
      • dfs.replication2
      • dfs.namenode.name.dirfile:///opt/hadoop/dfs/name
      • dfs.datanode.data.dirfile:///opt/hadoop/dfs/data
  • yarn-site.xml(所有节点)
    • 关键项:启用 YARN HAZK 状态存储
      • yarn.resourcemanager.ha.enabledtrue
      • yarn.resourcemanager.cluster-idyrc
      • yarn.resourcemanager.ha.rm-idsrm1,rm2
      • yarn.resourcemanager.hostname.rm1node1
      • yarn.resourcemanager.hostname.rm2node2
      • yarn.resourcemanager.zk-addressnode1:2181,node2:2181,node3:2181
      • yarn.nodemanager.aux-servicesmapreduce_shuffle
      • yarn.log-aggregation-enabletrue
      • yarn.log-aggregation.retain-seconds86400
      • yarn.resourcemanager.recovery.enabledtrue
      • yarn.resourcemanager.store.classorg.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore
  • workers(或 slaves,所有节点)
    • 列出所有 DataNode/NodeManager 主机名:
      • node3
      • node4
  • 配置分发
    • $HADOOP_HOME/etc/hadoop 同步到所有节点,保持一致性。

三 启动与初始化

  • 启动 ZooKeeper(所有 ZK 节点)
    • $ zkServer.sh start
    • $ zkServer.sh status(确认 1 个 leader + 多个 follower
  • 启动 JournalNode(所有 JN 节点)
    • $ hadoop-daemon.sh start journalnode(Hadoop 2.x)
    • 或 $ hdfs --daemon start journalnode(Hadoop 3.x)
  • 格式化 ZooKeeper ZNode(任一 NameNode 节点)
    • $ hdfs zkfc -formatZK
  • 格式化 NameNode(nn1)
    • $ hdfs namenode -format
  • 启动 nn1 NameNode
    • $ hadoop-daemon.sh start namenode(或 hdfs --daemon start namenode
  • nn2 引导并启动
    • $ hdfs namenode -bootstrapStandby
    • $ hadoop-daemon.sh start namenode
  • 启动 ZKFC(两台 NameNode)
    • $ hadoop-daemon.sh start zkfc(或 hdfs --daemon start zkfc
  • 启动 DataNode/NodeManager(所有工作节点)
    • $ hadoop-daemon.sh start datanode(或 hdfs --daemon start datanode
    • $ yarn-daemon.sh start nodemanager(或 yarn --daemon start nodemanager
  • 启动 ResourceManager(两台 RM)
    • $ yarn-daemon.sh start resourcemanager(或 yarn --daemon start resourcemanager
  • 一键启动(可选)
    • $ start-all.sh(Hadoop 2.x;Hadoop 3.x 建议按组件逐步启动以便排错)

四 验证与故障切换

  • 进程与状态检查
    • $ jps(应看到 NameNode/DataNode/JournalNode/ZKFC/ResourceManager/NodeManager
    • $ hdfs haadmin -getServiceState nn1hdfs haadmin -getServiceState nn2(应一 activestandby
    • $ yarn rmadmin -getServiceState rm1yarn rmadmin -getServiceState rm2
  • Web UI
    • HDFS:http://node1:50070http://node2:50070
    • YARN:http://node1:8088http://node2:8088
  • 故障转移测试
    • 终止 Active NameNode 进程(如 kill -9),观察另一台 Standby 自动切换为 Active
    • 恢复被终止的 NameNode,其将回到 Standby 状态
    • ResourceManager 执行相同 kill 测试,验证 YARN HA 切换

五 常见问题与排错要点

  • 两个 NameNode 都是 Standby
    • 检查 ZooKeeper 是否健康、ZKFC 是否启动、端口 2181/8020/50070/8485 是否可达;确认 dfs.ha.automatic-failover.enabled=truefencing 配置正确(如 sshfence 私钥路径)。
  • 自动切换不生效
    • 确认 hdfs zkfc -formatZK 已执行;检查 core-site.xmlha.zookeeper.quorumhdfs-site.xmlnameservice/HA 地址 一致;查看 zkfcJournalNode 日志定位异常。
  • JournalNode 无法启动或写入失败
    • 检查 dfs.journalnode.edits.dir 目录权限与磁盘空间;确认 QJM 地址端口(默认 8485)未被占用且防火墙已放通;确保 JournalNode 数量为 奇数且 ≥3 以保证写入多数派提交。
  • 端口与主机名解析
    • 统一 /etc/hosts 映射;避免 localhost 与主机名混用;必要时在 core-site.xml 设置 dfs.namenode.rpc-addressdfs.namenode.http-address 为实际主机名与端口。

0