Ubuntu Zookeeper与Hadoop集成方法
导读:Ubuntu 下 Zookeeper 与 Hadoop 集成指南 一 架构与准备 适用场景:为 HDFS HA(QJM) 与 YARN HA 提供 Zookeeper 仲裁与故障转移能力。 组件与版本建议: Ubuntu 20.04/2...
Ubuntu 下 Zookeeper 与 Hadoop 集成指南
一 架构与准备
- 适用场景:为 HDFS HA(QJM) 与 YARN HA 提供 Zookeeper 仲裁与故障转移能力。
- 组件与版本建议:
- Ubuntu 20.04/22.04 LTS
- Java 8(Hadoop 3.x 系列普遍推荐)
- Hadoop 3.3.x/3.4.x
- Zookeeper 3.7.x
- 基础环境:
- 配置 /etc/hosts 或 DNS,确保各节点主机名可解析;配置 SSH 免密 便于集群启停。
- 建议 Zookeeper 使用 奇数台(3/5/7) 节点,部署在与 Hadoop 不同的主机上更稳妥(也可同机隔离端口部署)。
二 安装与配置 Zookeeper 集群
- 安装(示例为 Apache 官方二进制包):
- 下载并解压至 /usr/local/zookeeper,设置环境变量:
- 编辑 /etc/profile 或 ~/.bashrc:
- export ZOOKEEPER_HOME=/usr/local/zookeeper
- export PATH=$PATH:$ZOOKEEPER_HOME/bin
- 执行:source /etc/profile
- 编辑 /etc/profile 或 ~/.bashrc:
- 下载并解压至 /usr/local/zookeeper,设置环境变量:
- 配置 $ZOOKEEPER_HOME/conf/zoo.cfg:
- 示例(3 节点:zk1/zk2/zk3,端口 2181/2888/3888):
- tickTime=2000
- initLimit=10
- syncLimit=5
- dataDir=/var/lib/zookeeper
- clientPort=2181
- server.1=zk1:2888:3888
- server.2=zk2:2888:3888
- server.3=zk3:2888:3888
- 示例(3 节点:zk1/zk2/zk3,端口 2181/2888/3888):
- 初始化 myid(各节点唯一,值为 server.X 的 X):
- zk1:echo “1” > /var/lib/zookeeper/myid
- zk2:echo “2” > /var/lib/zookeeper/myid
- zk3:echo “3” > /var/lib/zookeeper/myid
- 启动与验证:
- 各节点执行:zkServer.sh start
- 查看状态:zkServer.sh status(应见到 Leader/Follower 角色)
- 客户端连通性:echo stat | nc zk1 2181 或 zkCli.sh -server zk1:2181。
三 配置 Hadoop 使用 Zookeeper
- 在所有节点配置 $HADOOP_HOME/etc/hadoop/core-site.xml,加入 Zookeeper 仲裁地址(示例为 3 节点):
- ha.zookeeper.quorum zk1:2181,zk2:2181,zk3:2181
- 说明:
- 该属性用于 HDFS HA 的 ZKFailoverController(ZKFC) 与 YARN HA 的 ActiveStandbyElector 进行选主与故障转移;端口为 2181(Zookeeper 客户端端口)。
- 其他 Hadoop 基础参数(如 fs.defaultFS、dfs.nameservices、dfs.ha.namenodes.[nameservice]、dfs.namenode.rpc-address.[nameservice].[nn]、dfs.client.failover.proxy.provider.[nameservice] 等)按既有 HA 规划配置,本文聚焦 Zookeeper 集成关键点。
四 初始化与启动顺序
- 首次部署或重大变更后,建议按以下顺序执行(示例命令,按你的安装路径与脚本调整):
- 启动 Zookeeper 集群(所有 ZK 节点):
- zkServer.sh start
- 启动 JournalNode(所有 JN 节点):
- $HADOOP_HOME/sbin/hadoop-daemon.sh start journalnode
- 格式化并启动 Active NameNode(nn1):
- $HADOOP_HOME/bin/hdfs namenode -format
- $HADOOP_HOME/sbin/hadoop-daemon.sh start namenode
- 在 Standby NameNode(nn2)同步元数据并启动:
- $HADOOP_HOME/bin/hdfs namenode -bootstrapStandby
- $HADOOP_HOME/sbin/hadoop-daemon.sh start namenode
- 启动 ZKFC(两个 NameNode 节点):
- $HADOOP_HOME/sbin/hadoop-daemon.sh start zkfc
- 启动 DataNode(所有 DN 节点):
- $HADOOP_HOME/sbin/hadoop-daemon.sh start datanode
- 启动 YARN(ResourceManager/NodeManager):
- $HADOOP_HOME/sbin/start-yarn.sh
- 启动历史服务器(可选):
- $HADOOP_HOME/sbin/mr-jobhistory-daemon.sh start historyserver
- 启动 Zookeeper 集群(所有 ZK 节点):
- 验证要点:
- Zookeeper:zkServer.sh status 显示 Leader/Follower;zkCli.sh -server zk1:2181 可连入并查看 znode。
- HDFS:hdfs haadmin -getServiceState nn1 / nn2 应分别返回 active/standby;HDFS Web UI 正常。
- YARN:yarn rmadmin -getServiceState rm1 / rm2 显示 active/standby;YARN Web UI 正常。
五 常见问题与排查
- 无法形成集群或 ZKFC 无法选主:
- 检查 ha.zookeeper.quorum 地址与端口(默认 2181)是否可达;Zookeeper 节点数应为奇数且至少 3 台;myid 与 server.X 一一对应;防火墙/安全组放行 2181/2888/3888。
- 首次启动 NameNode 失败或元数据不一致:
- 确认 JournalNode 已启动且目录可写;必要时清理 dfs.namenode.name.dir/dfs.datanode.data.dir 后重新格式化(仅限全新环境)。
- 端口冲突或进程未启动:
- 使用 netstat -tulpen | grep -E ‘2181|2888|3888|50070|8088’ 检查端口占用;使用 jps 检查 QuorumPeerMain(ZK)/JournalNode/NameNode/DataNode/ZKFC/ResourceManager/NodeManager 进程是否存在。
- 版本兼容与 Java 版本:
- Hadoop 3.x 建议使用 Java 8;Zookeeper 3.7.x 与 Hadoop 3.3.x/3.4.x 组合在社区实践中较为常见。
- 配置分发与一致性:
- 修改 core-site.xml/hdfs-site.xml/yarn-site.xml 后,使用 scp/rsync 同步到所有节点,并统一环境变量与目录权限。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Zookeeper与Hadoop集成方法
本文地址: https://pptw.com/jishu/762386.html
