温馨提示×

Debian Hadoop 高可用性配置怎么做

小樊
42
2025-12-13 07:21:39
栏目: 智能运维

Debian Hadoop 高可用性配置实操指南

一 架构与前置条件

  • 组件与角色
    • ZooKeeper 集群:用于 Active/Standby 选主 与状态协调,建议 3 台及以上奇数节点
    • JournalNode 集群:运行 QJM(Quorum Journal Manager),承载 edits 日志,建议 3 台及以上奇数节点,端口默认 8485
    • NameNode 高可用nn1(Active)/nn2(Standby) 双节点,通过 ZKFC 实现自动故障转移。
    • YARN 高可用ResourceManager HA(rm1/rm2),同样依赖 ZooKeeper 实现自动故障转移。
  • 节点与端口规划(示例)
    • 主机:master、slave1、slave2
    • ZooKeeper:2181
    • JournalNode:8485
    • NameNode RPC:8020;NameNode HTTP:50070
  • 基础环境
    • Java 8/11/17(Hadoop 3.x 推荐 Java 8/11
    • SSH 免密登录(各节点互通)
    • 主机名解析(/etc/hosts 或 DNS)
    • 目录与权限:为 HDFS 元数据与 JournalNode 数据 预置本地目录并设置 hadoop 用户权限。

二 安装与基础配置

  • 安装 Hadoop 与 ZooKeeper(略,建议使用相同版本二进制包,解压至统一目录,如 /opt/hadoop/opt/zookeeper
  • 配置环境变量(示例)
    • /etc/profile.d/hadoop.sh
      • export HADOOP_HOME=/opt/hadoop
      • export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
      • export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
    • /etc/profile.d/zookeeper.sh
      • export ZOOKEEPER_HOME=/opt/zookeeper
      • export PATH=$ZOOKEEPER_HOME/bin:$PATH
  • 分发配置到所有节点
    • 建议将 $HADOOP_CONF_DIR 下配置统一分发,避免节点间不一致。

三 HDFS 高可用配置

  • 核心配置示例
    • core-site.xml
      • fs.defaultFShdfs://mycluster
      • ha.zookeeper.quorummaster:2181,slave1:2181,slave2:2181
    • hdfs-site.xml
      • dfs.nameservicesmycluster
      • dfs.ha.namenodes.myclusternn1,nn2
      • dfs.namenode.rpc-address.mycluster.nn1master:8020
      • dfs.namenode.rpc-address.mycluster.nn2slave1:8020
      • dfs.namenode.http-address.mycluster.nn1master:50070
      • dfs.namenode.http-address.mycluster.nn2slave1:50070
      • dfs.namenode.shared.edits.dirqjournal://master:8485;slave1:8485;slave2:8485/mycluster
      • dfs.journalnode.edits.dir/var/lib/hadoop/journalnode
      • dfs.client.failover.proxy.provider.myclusterorg.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
      • dfs.ha.fencing.methodssshfence
      • dfs.ha.fencing.ssh.private-key-files/home/hadoop/.ssh/id_rsa
      • dfs.ha.automatic-failover.enabledtrue
  • 关键说明
    • dfs.nameservices 为逻辑集群名(如 mycluster),后续所有 NameNode 配置均以其为前缀。
    • dfs.ha.namenodes.[nameservice] 列出所有 NameNode ID(通常为 nn1、nn2)。
    • dfs.namenode.shared.edits.dir 使用 QJM,地址形如 qjournal://host1:8485;host2:8485;host3:8485/clusterId,建议 3/5/7 个 JournalNode
    • fencing 方法 建议使用 sshfence 并配置私钥,确保故障隔离;自动故障转移需启用 ZKFC

四 启动与初始化步骤

  • 启动 ZooKeeper(所有 ZK 节点)
    • zkServer.sh start
    • zkServer.sh status(确认 Leader/Follower 角色)
  • 启动 JournalNode(所有 JN 节点)
    • hdfs --daemon start journalnode
  • 格式化与初始化(仅首次)
    • nn1 上:hdfs namenode -format
    • nn1 上初始化共享编辑日志:hdfs namenode -initializeSharedEdits
    • nn2 上同步元数据:hdfs namenode -bootstrapStandby
  • 初始化 ZKFC(任一 NameNode)
    • hdfs zkfc -formatZK
  • 启动 HDFS
    • start-dfs.sh(会自动拉起 ZKFC 守护进程)
  • 验证
    • hdfs haadmin -getServiceState nn1 / nn2(应一 activestandby
    • hdfs dfsadmin -report(检查 Live/Decommissioning DataNodes)
    • 浏览器访问 http://master:50070http://slave1:50070 查看 Active/Standby 状态。

五 YARN 高可用与验证

  • 配置示例(yarn-site.xml)
    • yarn.resourcemanager.ha.enabledtrue
    • yarn.resourcemanager.cluster-idyarn-cluster
    • yarn.resourcemanager.ha.rm-idsrm1,rm2
    • yarn.resourcemanager.hostname.rm1master
    • yarn.resourcemanager.hostname.rm2slave1
    • yarn.resourcemanager.zk-addressmaster:2181,slave1:2181,slave2:2181
    • yarn.resourcemanager.webapp.address.rm1master:8088
    • yarn.resourcemanager.webapp.address.rm2slave1:8088
  • 启动与验证
    • start-yarn.sh
    • yarn rmadmin -getServiceState rm1 / rm2(一 activestandby
    • 浏览器访问 http://master:8088http://slave1:8088 查看 Active RM
    • 提交测试作业(如 piwordcount)验证 故障切换作业连续性

六 常见问题与运维要点

  • 目录与权限
    • 确保 dfs.namenode.name.dirdfs.datanode.data.dirdfs.journalnode.edits.dir 存在且属 hadoop 用户;异常时清理 DataNode 数据目录 可避免 clusterID 冲突。
  • 端口与防火墙
    • 放行 2181(ZK)8485(QJM)8020/50070(NN RPC/HTTP)8088(RM Web) 等端口;生产环境建议使用 防火墙白名单 而非直接关闭防火墙。
  • JournalNode 数据一致性
    • 变更 QJM 配置或异常后,必要时清理 JournalNode 数据目录 并重启,再执行 -initializeSharedEdits
  • 自动故障转移
    • 确保 ZKFC 已启动且 fencing 方法 可用;若切换失败,优先检查 ZooKeeper 会话超时fencing 私钥权限
  • 客户端与兼容性
    • 客户端需使用 nameservice 访问(如 hdfs://mycluster),避免直接连 nn1/nn2;跨版本升级需按官方升级路径执行。

0