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

Hadoop集群如何在Linux上实现高可用

时间2025-12-13 00:25:03发布访客分类主机资讯浏览626
导读:Linux上实现Hadoop高可用 一、架构要点 HDFS HA:部署两个 NameNode(Active/Standby),通过Quorum Journal Manager(QJM)共享编辑日志,使用ZooKeeper + ZKFail...

Linux上实现Hadoop高可用

一、架构要点

  • HDFS HA:部署两个 NameNode(Active/Standby),通过Quorum Journal Manager(QJM)共享编辑日志,使用ZooKeeper + ZKFailoverController(ZKFC)实现自动故障转移与 fencing,避免脑裂;DataNode 同时向两个 NameNode 上报块位置,保证快速切换。QJM 通常由至少 3 个且为奇数的 JournalNode 组成,可容忍 (N-1)/2 个节点故障。启用 HA 后不再需要 SecondaryNameNode。
  • YARN HA:部署两个 ResourceManager(Active/Standby),依赖 ZooKeeper 进行状态管理与自动故障转移,确保资源管理服务不中断。

二、环境与角色规划

  • 基础要求:Linux 主机、统一主机名与 /etc/hostsJDK 1.8+SSH 免密NTP 时间同步、关闭防火墙/SELinux(或放行端口),并部署ZooKeeper 集群(建议 3/5/7 节点)
  • 典型最小规划(示例):
    • zk1/zk2/zk3:ZooKeeper
    • nn1/nn2:NameNode(同时各运行 ZKFC
    • jn1/jn2/jn3:JournalNode(QJM)
    • 其余节点:DataNode + NodeManager(可按需增加 JournalNode 提升容错)。

三、关键配置步骤

  • 配置 core-site.xml(示例)
    • 指定命名服务与 ZooKeeper:
      • fs.defaultFS=hdfs://(如:hdfs://mycluster)
      • ha.zookeeper.quorum=zk1:2181,zk2:2181,zk3:2181
  • 配置 hdfs-site.xml(示例)
    • 命名服务与 NameNode 列表:
      • dfs.nameservices=mycluster
      • dfs.ha.namenodes.mycluster=nn1,nn2
    • RPC 与 HTTP 地址:
      • 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.ha.automatic-failover.enabled=true
      • dfs.client.failover.proxy.provider.mycluster=org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
    • 隔离机制(防脑裂):
      • dfs.ha.fencing.methods=sshfence(可叠加 shell(/bin/true) 作为兜底)
      • dfs.ha.fencing.ssh.private-key-files=/home/hadoop/.ssh/id_rsa
    • JournalNode 本地目录:
      • dfs.journalnode.edits.dir=/data/hadoop/journal
  • 配置 yarn-site.xml(示例)
    • 启用 RM HA:
      • yarn.resourcemanager.ha.enabled=true
      • yarn.resourcemanager.cluster-id=yarn-cluster
      • 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
    • 运行 MapReduce:
      • mapreduce.framework.name=yarn
      • yarn.nodemanager.aux-services=mapreduce_shuffle
  • 同步配置到所有节点,保持 nameservice 名称与地址一致。

四、初始化与启动顺序

  1. 启动 ZooKeeper 集群(所有 zk 节点)。
  2. 启动 JournalNode(jn1/jn2/jn3):hdfs --daemon start journalnode
  3. 格式化 Active NameNodehdfs namenode -format(仅首次)。
  4. 在另一台 NameNode 上引导 Standby:hdfs namenode -bootstrapStandby
  5. 初始化 ZKFC(在 nn1、nn2 上):hdfs zkfc -formatZK
  6. 启动 NameNodehdfs --daemon start namenode(两台)。
  7. 启动 ZKFC 守护进程hdfs --daemon start zkfc(两台)。
  8. 启动 ResourceManager(rm1、rm2):yarn --daemon start resourcemanager
  9. 启动 NodeManagerDataNode(各工作节点):yarn --daemon start nodemanagerhdfs --daemon start datanode
  10. 验证:
    • HDFS Web:http://nn1:50070http://nn2:50070 应显示 Active/Standby
    • 执行 hdfs dfsadmin -reportyarn node -list 检查集群健康;
    • 客户端使用 nameservice(如 hdfs://mycluster)进行读写,验证自动故障转移。

五、验证与运维要点

  • 故障转移演练:
    • 计划内切换:hdfs haadmin -failover --forcefence --forceactive nn1 nn2
    • 模拟故障:在 Active NameNode 上 kill -9 < NN_PID> ,观察 Standby 自动提升为 Active,并确认客户端无中断或仅短暂重试。
  • 脑裂防护:确保 fencing 方法配置正确且可用(如 sshfence 私钥可达),避免双 Active。
  • 数据可靠性:QJM 写入需多数派确认,部署奇数个 JournalNode;定期检查 JournalNode 数据目录与磁盘空间。
  • 日常巡检:
    • ZooKeeper:echo stat | nc zk1 2181 查看 Mode/Connections;
    • HDFS:hdfs haadmin -getServiceState nn1hdfs dfsadmin -report
    • YARN:yarn rmadmin -getServiceState rm1yarn node -list -all
    • 日志:检查 NameNode、JournalNode、ZKFC、ResourceManager 日志异常。
  • 常见排错:
    • 端口不通(如 8020/8485/50070/8088)与防火墙/SELinux;
    • SSH 免密未配置或权限错误导致 fencing 失败;
    • ZooKeeper 会话超时或网络分区导致误切换;
    • 客户端未使用 nameservice 地址导致无法享受自动切换。

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


若转载请注明出处: Hadoop集群如何在Linux上实现高可用
本文地址: https://pptw.com/jishu/771114.html
Debian dmesg日志包含哪些硬件信息 Linux Hadoop如何实现数据加密

游客 回复需填写必要信息