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

如何在Ubuntu HDFS上配置高可用性

时间2025-11-21 10:46:04发布访客分类主机资讯浏览1092
导读:Ubuntu 上配置 HDFS 高可用 HA 实操指南 一 架构与前置准备 架构要点 使用 Active/Standby 双 NameNode,通过 **QJM(Quorum Journal Manager)**共享编辑日志,消除单点故...

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

一 架构与前置准备

  • 架构要点
    • 使用 Active/Standby 双 NameNode,通过 **QJM(Quorum Journal Manager)**共享编辑日志,消除单点故障。
    • JournalNode 至少 3 台且为奇数,保证写入过半成功与可用性。
    • ZooKeeper 集群 3/5 台配合 **ZKFC(ZooKeeper Failover Controller)**实现自动故障转移;ZKFC 需与 NameNode 同机部署。
    • DataNode 向两台 NameNode 同时上报块信息,Standby 可快速接管。
  • 推荐节点规划(示例)
    • NameNode/ZKFC:ubuntu1、ubuntu2
    • JournalNode:ubuntu1、ubuntu2、ubuntu3
    • DataNode:ubuntu3、ubuntu4、ubuntu5
  • 基础环境
    • 关闭防火墙或放行端口(如 8020/8485/9870/2181),配置 /etc/hosts 主机映射,配置 SSH 免密,安装 JDK 1.8+,时间同步(如 chrony/ntp)。
    • 安装并启动 ZooKeeper 集群(3 节点为示例)。

二 核心配置示例

  • 说明
    • 以下为最小可用示例,按你的实际主机名与目录调整;端口示例:QJM 8485,NameNode RPC 8020,HTTP 9870(Hadoop 3.x),ZooKeeper 2181
  • core-site.xml
<
    configuration>
    
  <
    property>
    
    <
    name>
    fs.defaultFS<
    /name>
    
    <
    value>
    hdfs://mycluster<
    /value>
    
  <
    /property>
    
  <
    property>
    
    <
    name>
    hadoop.tmp.dir<
    /name>
    
    <
    value>
    /home/hadoop/tmp<
    /value>
    
  <
    /property>
    
  <
    property>
    
    <
    name>
    io.file.buffer.size<
    /name>
    
    <
    value>
    4096<
    /value>
    
  <
    /property>
    
  <
    property>
    
    <
    name>
    fs.trash.interval<
    /name>
    
    <
    value>
    10080<
    /value>
    
  <
    /property>
    
  <
    !-- ZooKeeper 地址 -->
    
  <
    property>
    
    <
    name>
    ha.zookeeper.quorum<
    /name>
    
    <
    value>
    ubuntu1:2181,ubuntu2:2181,ubuntu3:2181<
    /value>
    
  <
    /property>
    
<
    /configuration>
    
  • hdfs-site.xml
<
    configuration>
    
  <
    !-- 基本目录 -->
    
  <
    property>
    
    <
    name>
    dfs.replication<
    /name>
    
    <
    value>
    3<
    /value>
    
  <
    /property>
    
  <
    property>
    
    <
    name>
    dfs.namenode.name.dir<
    /name>
    
    <
    value>
    file:///home/hadoop/dfs/name<
    /value>
    
  <
    /property>
    
  <
    property>
    
    <
    name>
    dfs.datanode.data.dir<
    /name>
    
    <
    value>
    file:///home/hadoop/dfs/data<
    /value>
    
  <
    /property>
    

  <
    !-- 命名服务与 NN 列表 -->
    
  <
    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>
    

  <
    !-- QJM 共享编辑日志 -->
    
  <
    property>
    
    <
    name>
    dfs.namenode.shared.edits.dir<
    /name>
    
    <
    value>
    qjournal://ubuntu1:8485;
    ubuntu2:8485;
    ubuntu3:8485/mycluster<
    /value>
    
  <
    /property>
    
  <
    property>
    
    <
    name>
    dfs.journalnode.edits.dir<
    /name>
    
    <
    value>
    /home/hadoop/journal<
    /value>
    
  <
    /property>
    

  <
    !-- 客户端故障转移代理 -->
    
  <
    property>
    
    <
    name>
    dfs.client.failover.proxy.provider.mycluster<
    /name>
    
    <
    value>
    org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider<
    /value>
    
  <
    /property>
    

  <
    !-- 隔离方法(SSH 示例,需免密) -->
    
  <
    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>
    
<
    /configuration>
    
  • 分发与权限
    • core-site.xml、hdfs-site.xml 分发到所有节点相同路径;确保 ubuntu1/ubuntu2SSH 免密 与私钥路径一致;如以 root 运行,需在 start-dfs.sh/stop-dfs.sh 等脚本顶部设置用户环境变量(如 HDFS_DATANODE_USER、HDFS_NAMENODE_USER、HDFS_ZKFC_USER 等)。

三 启动与验证

  • 启动顺序
    1. 启动 ZooKeeper(3 台)
      • zkServer.sh start
    2. 启动 JournalNode(3 台)
      • hadoop-daemon.sh start journalnode
    3. 格式化第一个 NameNode(仅一次)
      • hdfs namenode -format
    4. 在另一台 NameNode 引导 Standby(首次)
      • hdfs namenode -bootstrapStandby
    5. 初始化 ZKFC(任一 NN 执行)
      • hdfs zkfc -formatZK
    6. 启动 HDFS
      • start-dfs.sh
  • 常用验证
    • 查看进程:jps(应见到 NameNode/DataNode/JournalNode/ZKFC
    • 查看状态:hdfs haadmin -getServiceState nn1 / nn2(返回 active/standby
    • Web UI:访问 http://ubuntu1:9870http://ubuntu2:9870 查看 Active/Standby 与集群概况
    • 故障演练:kill -9 < Active NN 进程> 或断网,观察自动切换与恢复。

四 常见问题与排错要点

  • JournalNode 无法启动或未过半:确认 3 台 JN 已启动且磁盘可写,编辑日志目录权限正确;QJM 写入需多数派成功。
  • 自动故障转移失败:检查 ZooKeeper 连通性、ZKFC 是否运行、隔离方法(如 sshfence)与私钥路径是否正确;首次需执行 zkfc -formatZK
  • 两个 NameNode 同时 Active:多因未配置或失效的 fencing 方法,导致隔离不彻底;启用并验证 sshfence 能成功隔离旧 Active。
  • 客户端连不通/切换慢:确认 core-site.xmlfs.defaultFS=hdfs://mycluster,客户端能解析 mycluster;必要时调整故障转移代理与重试策略。
  • 端口与防火墙:放行 8020/8485/9870/2181;浏览器访问 9870 检查 Active/Standby 状态与 JournalNode 健康。

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


若转载请注明出处: 如何在Ubuntu HDFS上配置高可用性
本文地址: https://pptw.com/jishu/753076.html
如何在Ubuntu HDFS上配置权限 Ubuntu HDFS如何设置数据块大小

游客 回复需填写必要信息