首页主机资讯Ubuntu如何配置HDFS的高可用性

Ubuntu如何配置HDFS的高可用性

时间2025-12-03 18:29:03发布访客分类主机资讯浏览329
导读:Ubuntu上配置HDFS高可用 HA 实操指南 一 架构与前置准备 组件与角色 Active/Standby NameNode:双主备,保持元数据一致,对外提供统一命名空间。 ZooKeeper 集群:协调故障检测与自动切换(建议3或...

Ubuntu上配置HDFS高可用 HA 实操指南

一 架构与前置准备

  • 组件与角色
    • Active/Standby NameNode:双主备,保持元数据一致,对外提供统一命名空间。
    • ZooKeeper 集群:协调故障检测与自动切换(建议3或5节点奇数台)。
    • JournalNode 集群:至少3节点,持久化共享编辑日志(edits),保证两 NameNode 状态同步。
    • ZKFC(DFSZKFailoverController):运行在每个 NameNode 上,借助 ZooKeeper 实现自动故障转移与健康监测。
    • DataNode:存储数据块,按副本策略分布。
  • 节点规划示例(可按需扩展)
    • ubuntu1/ubuntu2:NameNode + ZKFC
    • ubuntu3/ubuntu4/ubuntu5:JournalNode
    • ubuntu3–ubuntu5:DataNode(可与 JournalNode 混部)
  • Ubuntu 基础环境
    • 关闭防火墙或放行端口(如 2181/2888/3888 ZooKeeper,8485 JournalNode,8020 RPC,9870 Web UI):sudo ufw disable 或按需放行。
    • 配置 /etc/hosts 主机名解析,确保各节点互通。
    • 配置 SSH 免密登录(至少 NameNode 之间、NameNode→各节点)。
    • 安装 JDK 8/11 并配置 JAVA_HOME,安装相同版本的 Hadoop 3.x

二 安装与配置 ZooKeeper

  • 下载解压并配置环境变量(略)。
  • 编辑 conf/zoo.cfg(示例):
    • 关键项:tickTime=2000dataDir=/var/lib/zookeeperclientPort=2181
    • 集群节点:server.1=ubuntu1:2888:3888server.2=ubuntu2:2888:3888server.3=ubuntu3:2888:3888
  • 各节点 dataDir 下创建 myid 文件,内容分别为 1/2/3
  • 启动与验证(三台均执行):
    • 启动:bin/zkServer.sh start
    • 状态:bin/zkServer.sh status(应见到 leader/follower)。

三 配置 Hadoop 与 HDFS HA

  • 公共环境
    • 建议统一 HADOOP_HOME 与配置文件目录,使用 scp 分发到所有节点,保持版本与配置一致。
    • hadoop-env.sh 中设置 export JAVA_HOME=...
  • 关键配置示例(按你的主机名与路径调整)
    • core-site.xml
      • < property> < name> fs.defaultFS< /name> < value> hdfs://mycluster< /value> < /property>
      • < property> < name> ha.zookeeper.quorum< /name> < value> ubuntu1:2181,ubuntu2:2181,ubuntu3:2181< /value> < /property>
    • hdfs-site.xml(要点)
      • 命名服务与 NameNode ID
        • < property> < name> dfs.nameservices< /name> < value> mycluster< /value> < /property>
        • < property> < name> dfs.ha.namenodes.mycluster< /name> < value> nn1,nn2< /value> < /property>
      • RPC 与 HTTP 地址
        • < property> < name> dfs.namenode.rpc-address.mycluster.nn1< /name> < value> ubuntu1:8020< /value> < /property>
        • < property> < name> dfs.namenode.rpc-address.mycluster.nn2< /name> < value> ubuntu2:8020< /value> < /property>
        • < property> < name> dfs.namenode.http-address.mycluster.nn1< /name> < value> ubuntu1:9870< /value> < /property>
        • < property> < name> dfs.namenode.http-address.mycluster.nn2< /name> < value> ubuntu2:9870< /value> < /property>
      • 共享编辑日志(JournalNode)
        • < property> < name> dfs.namenode.shared.edits.dir< /name> < value> qjournal://ubuntu3:8485; ubuntu4:8485; ubuntu5:8485/mycluster< /value> < /property>
        • < property> < name> dfs.journalnode.edits.dir< /name> < value> /data/hadoop/journal< /value> < /property>
      • 客户端故障转移代理
        • < property> < name> dfs.client.failover.proxy.provider.mycluster< /name> < value> org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider< /value> < /property>
      • 隔离与防护(避免脑裂)
        • < property> < name> dfs.ha.fencing.methods< /name> < value> sshfence< /value> < /property>
        • < property> < name> dfs.ha.fencing.ssh.private-key-files< /name> < value> /home/hadoop/.ssh/id_rsa< /value> < /property>
      • 启用自动故障转移
        • < property> < name> dfs.ha.automatic-failover.enabled< /name> < value> true< /value> < /property>
    • workers(DataNode 列表)
      • ubuntu3
      • ubuntu4
      • ubuntu5
  • 分发配置
    • scp -r $HADOOP_HOME/etc/hadoop ubuntu{ 2..5} :$HADOOP_HOME/etc/
    • 各节点 source /etc/profile 使环境变量生效。

四 启动与验证 HA

  • 启动顺序
    1. 启动 ZooKeeper(三台):zkServer.sh start
    2. 启动 JournalNode(三台):hdfs --daemon start journalnode
    3. 格式化第一个 NameNode(仅首次):hdfs namenode -format
    4. 初始化共享编辑日志(仅首次):hdfs namenode -initializeSharedEdits
    5. 启动该 NameNode:hdfs --daemon start namenode
    6. 在另一 NameNode 上引导 Standby:hdfs namenode -bootstrapStandby
    7. 格式化 ZKFC(任一 NameNode):hdfs zkfc -formatZK
    8. 启动 ZKFC(两台 NameNode):hdfs --daemon start zkfc
    9. 启动 DataNode(三台):hdfs --daemon start datanode
    10. 一键启动(可选):start-dfs.sh
  • 验证与切换测试
    • 查看状态
      • hdfs haadmin -getServiceState nn1hdfs haadmin -getServiceState nn2
      • hdfs dfsadmin -report(检查 Live Nodes 与容量)
      • Web UI:http://ubuntu1:9870http://ubuntu2:9870
    • 故障演练
      • 终止 Active NameNode:jps 查 PID 后 kill -9 < PID>
      • 再次检查状态,确认 Standby 自动切换为 Active,业务无中断或快速恢复。

五 常见问题与排障要点

  • 端口与防火墙:确保 2181/2888/3888(ZK)、8485(JournalNode)、8020(RPC)、9870(Web)放通;必要时临时 ufw disable 验证。
  • 目录与数据冲突
    • 重新初始化前清理 JournalNode 数据目录:rm -rf /data/hadoop/journal/mycluster/*
    • 若 DataNode 未起来或 clusterID 冲突,清理 DataNode 数据目录(如 /home/hadoop/dfs/data/*)后重启。
  • SSH 免密与 fencing:ZKFC 需要 NameNode 间 SSH 免密sshfence 需配置私钥路径且可无口令登录对端。
  • 配置一致性:所有节点的 core-site.xml/hdfs-site.xml/workers 必须一致;变更后及时分发并重启相关进程。
  • 首次启动顺序:务必先启动 JournalNode,再初始化共享编辑日志与格式化 NameNode,最后启动 ZKFC 与 DataNode。

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


若转载请注明出处: Ubuntu如何配置HDFS的高可用性
本文地址: https://pptw.com/jishu/762603.html
Debian MariaDB如何进行集群搭建 Compton配置中如何调整动画速度

游客 回复需填写必要信息