首页主机资讯Ubuntu中HDFS如何实现高可用

Ubuntu中HDFS如何实现高可用

时间2025-12-03 13:55:03发布访客分类主机资讯浏览1363
导读:Ubuntu上实现 HDFS 高可用 HA 的完整方案 一 架构与前提 架构要点:部署两个 NameNode(Active/Standby),通过JournalNode(QJM)共享编辑日志,借助ZooKeeper + ZKFC实现自动故...

Ubuntu上实现 HDFS 高可用 HA 的完整方案

一 架构与前提

  • 架构要点:部署两个 NameNode(Active/Standby),通过JournalNode(QJM)共享编辑日志,借助ZooKeeper + ZKFC实现自动故障转移与健康监测,避免单点故障与“脑裂”。DataNode 同时向两个 NameNode 上报块位置,保证快速切换后服务可用。
  • 角色建议(示例):ubuntu1/ubuntu2NameNode + JournalNode + ZKFCubuntu3/ubuntu4DataNode + JournalNode(JournalNode 建议奇数个,便于多数派提交)。
  • 基础环境:Ubuntu 主机名与 /etc/hosts 正确映射、免密 SSH、已安装 JDK 8/11、Hadoop 3.x 解压到统一路径(如 /usr/local/hadoop),并配置 JAVA_HOME/HADOOP_HOME 环境变量。

二 配置步骤

  • 配置 ZooKeeper 集群(3 台或 5 台)
    • 下载解压 ZooKeeper,编辑 conf/zoo.cfg:设置 dataDirserver.x=host:2888:3888;在各节点 dataDir 下创建 myid 文件标识 x
    • 启动并检查状态:在各节点执行 zkServer.sh start,用 zkServer.sh status 确认 Leader/Follower 角色正常。
  • 配置 Hadoop(所有节点一致,按 nameservice 调整)
    • core-site.xml(关键项)
      • fs.defaultFS:设为 hdfs://mycluster(使用逻辑名称服务)。
      • ha.zookeeper.quorum:设为 ubuntu1:2181,ubuntu2:2181,ubuntu3:2181
    • hdfs-site.xml(关键项)
      • dfs.nameservices:设为 mycluster
      • dfs.ha.namenodes.mycluster:设为 nn1,nn2
      • dfs.namenode.rpc-address.mycluster.nn1 / nn2:如 ubuntu1:8020 / ubuntu2:8020
      • dfs.namenode.http-address.mycluster.nn1 / nn2:如 ubuntu1:9870 / ubuntu2:9870(Hadoop 3.x 默认 9870 端口)。
      • dfs.namenode.shared.edits.dir:设为 qjournal://ubuntu1:8485; ubuntu2:8485; ubuntu3:8485/mycluster(QJM 地址)。
      • dfs.journalnode.edits.dir:JournalNode 本地编辑目录(如 /home/hadoop/data/journal)。
      • dfs.client.failover.proxy.provider.mycluster:设为 org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
      • 启用自动故障转移:dfs.ha.automatic-failover.enabled.mycluster=true
    • 分发配置:将 core-site.xml / hdfs-site.xml 同步到所有节点,保持路径与内容一致。

三 启动与初始化

  • 启动 ZooKeeper:三台节点执行 zkServer.sh start
  • 启动 JournalNode:在 ubuntu1/ubuntu2/ubuntu3 执行 hdfs --daemon start journalnode;如目录残留导致启动失败,清理后再启(如 rm -rf /usr/local/hadoop/data/journalnode/mycluster/*)。
  • 格式化与共享编辑日志
    • 首次部署时,在 ubuntu1(将作为初始 Active)执行:hdfs namenode -format
    • 初始化共享编辑:hdfs namenode -initializeSharedEdits(将本地 edits 初始化到 QJM)。
  • 同步 Standby 元数据:在 ubuntu2 执行:hdfs namenode -bootstrapStandby,从 Active 拉取元数据。
  • 初始化 ZKFC(自动故障转移所需 znode):在任一 NameNode(如 ubuntu1)执行:hdfs zkfc -formatZK
  • 启动 HDFS:在 ubuntu1 执行 start-dfs.sh;随后在各 NameNode 上确认 ZKFC 已启动(或使用 hdfs --daemon start zkfc 单独拉起)。

四 验证与运维

  • 查看与切换状态
    • 查看 NameNode 状态:hdfs haadmin -getServiceState nn1 / nn2(应一 active、一 standby)。
    • 手动切换(可选):hdfs haadmin -failover --forcefence --forceactive nn2 nn1
    • 集群健康:hdfs dfsadmin -report;Web 界面:http://ubuntu1:9870http://ubuntu2:9870
  • 故障转移测试
    • 终止 Active NameNode(如 kill ubuntu2 的 NameNode 进程),观察 Standby 是否在数十秒内自动提升为 Active,且客户端写入/读取不受影响。
  • 常见问题与要点
    • 配置变更需分发到所有节点并重启相关进程;JournalNode 目录异常需清理后重启
    • 若 DataNode 未起来或 clusterID 冲突,清理 DataNode 数据目录(如 /home/hadoop/dfs/data/)后重启;确保 dfs.replicationDataNode 数量匹配。
    • 自动故障转移依赖 ZooKeeper 会话ZKFC 健康检查;确保 ZooKeeper 集群稳定、网络与防火墙策略正确。

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


若转载请注明出处: Ubuntu中HDFS如何实现高可用
本文地址: https://pptw.com/jishu/762329.html
如何在Ubuntu上配置HDFS集群 Ubuntu下HDFS如何监控

游客 回复需填写必要信息