HBase 2.5.x 分布式集群必须依赖外部 ZooKeeper(3.4.6+),HBASE_MANAGES_ZK=false 是硬性要求;内置 ZooKeeper 仅支持伪分布式,真集群会导致 RegionServer 注册失败、Master 卡在 INIT 状态。

直接说结论:HBase 2.5.x 分布式集群必须依赖外部 ZooKeeper(3.4.6+),HBASE_MANAGES_ZK=false 是硬性要求;用内置 ZooKeeper 只能跑伪分布式,一上真集群就 RegionServer 注册失败、Master 卡在 INIT 状态。
为什么不能用 HBASE_MANAGES_ZK=true 搭分布式集群
这个配置只允许单点启动一个 ZooKeeper 实例,而分布式 HBase 要求至少 3 节点 ZooKeeper 集群来保证 HMaster 高可用和元数据强一致。一旦设为 true,所有 RegionServer 会尝试连本机 2181,但其他节点根本没开 ZK 服务 —— 日志里反复出现 Connection refused 或 Session expired,hbase zkcli 连不上任何节点。
-
HBASE_MANAGES_ZK=true仅适用于单机伪分布式(如开发测试) - 生产环境或 ≥3 节点集群,ZooKeeper 必须独立部署、单独启停、跨节点互通
- HBase 2.5+ 已移除对 ZooKeeper 3.4 以下版本的支持,
zookeeper-3.8.2是当前最稳选择
hbase-site.xml 里这 5 个配置项不能错
少配、配错任意一项,HMaster 启不起来,或者 RegionServer 启动后立刻退出。重点盯住下面这些值:
-
hbase.rootdir:必须是 HDFS 完整 URI,比如hdfs://master:9000/hbase(不是file:///,也不是hdfs://localhost) -
hbase.cluster.distributed:必须为true(字符串,不是布尔值) -
hbase.zookeeper.quorum:填主机名列表,如node1,node2,node3,不能带端口,且主机名必须和/etc/hosts里完全一致 -
hbase.zookeeper.property.clientPort:ZooKeeper 客户端端口,默认2181,所有节点保持一致 -
hbase.tmp.dir:本地路径,确保所有节点该目录存在、可读写、不跨文件系统(避免 NFS)
regionservers 文件和免密登录是启动前提
start-hbase.sh 脚本本质是用 ssh 在各节点拉起 RegionServer 进程。如果这步失败,你看到的只会是 starting regionserver, logging to ... 然后静默退出。
-
$HBASE_HOME/conf/regionservers里只写主机名(如node1),不写 IP、不加端口、不加#注释 - 从
HMaster节点执行ssh node1 date必须秒回,否则先配好免密登录(ssh-copy-id) - 检查每台
RegionServer节点是否已同步$HBASE_HOME和$HADOOP_HOME环境变量,source /etc/profile后再试 - 别忽略 SELinux 和防火墙:
firewall-cmd --permanent --add-port=16030/tcp(RegionServer UI)、16010(Master UI)、2181(ZK)
启动顺序和验证要点
顺序错了,Master 会反复 abort,日志里刷屏 Failed to become active master。
- 先启 ZooKeeper 集群:
zkServer.sh start每台都跑一遍,用echo stat | nc node1 2181确认 Quorum 成员数 ≥3 - 再启 HDFS:
start-dfs.sh,确认hdfs dfsadmin -report显示全部 DataNode 在线 - 最后启 HBase:
start-hbase.sh(只在 Master 节点运行),等 30 秒再查日志 - 验证看三处:
http://master:16010(Master UI 中Region Servers列表非空)、hbase shell里执行status返回1 active master, 3 backup masters, 3 live servers、hdfs dfs -ls /hbase有数据目录
最容易被跳过的其实是时间同步 —— 所有节点差超 30 秒,ZooKeeper session 就会频繁断连,zookeeper.session.timeout 设再大也救不回来。


















