- 首页 >
- 问答 >
-
智能运维 >
- Debian Hadoop 高可用性配置怎么做
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
- start-dfs.sh(会自动拉起 ZKFC 守护进程)
- 验证
- hdfs haadmin -getServiceState nn1 / nn2(应一 active 一 standby)
- hdfs dfsadmin -report(检查 Live/Decommissioning DataNodes)
- 浏览器访问 http://master:50070 与 http://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(一 active 一 standby)
- 浏览器访问 http://master:8088 或 http://slave1:8088 查看 Active RM
- 提交测试作业(如 pi 或 wordcount)验证 故障切换 与 作业连续性。
六 常见问题与运维要点
- 目录与权限
- 确保 dfs.namenode.name.dir、dfs.datanode.data.dir、dfs.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;跨版本升级需按官方升级路径执行。