HBase完全分布式部署详细教程(含HA高可用版+普通非HA版)
下面给你一套**零基础、可直接照着做**的 HBase 完全分布式部署教程,包含**普通非HA版**和**HA高可用版(主备HMaster)**,基于 Hadoop 3.x + Zookeeper 3.5+ + HBase 2.2.x/2.4.x,生产可用、步骤完整、可直接复制命令。
---
## 一、集群规划(3节点示例,可扩5节点)
### 节点角色(主机名+IP示例)
- **master(192.168.1.100)**:HMaster、RegionServer、Zookeeper
- **slave1(192.168.1.101)**:HMaster(备)、RegionServer、Zookeeper
- **slave2(192.168.1.102)**:RegionServer、Zookeeper
> 非HA版:仅 master 跑 HMaster;HA版:master+slave1 双 HMaster 主备。
### 前置条件(所有节点必须完成)
1. **JDK 1.8+** 已安装,`JAVA_HOME` 配置正确
2. **Hadoop 3.x 完全分布式** 已启动(非HA/HA均可)
3. **Zookeeper 3.5+ 集群** 已启动(3节点,myid=1/2/3)
4. **主机名解析**:`/etc/hosts` 配置所有节点IP+主机名
5. **SSH免密互通**:master 能免密登 slave1/slave2
6. **时间同步**:所有节点时间差 < 30秒(chrony/NTP)
---
## 二、安装 HBase(所有节点执行)
### 1. 下载解压(master节点操作,再分发)
```bash
# 下载(推荐2.4.18稳定版)
wget https://archive.apache.org/dist/hbase/2.4.18/hbase-2.4.18-bin.tar.gz
# 解压到 /opt
tar -zxvf hbase-2.4.18-bin.tar.gz -C /opt/
mv /opt/hbase-2.4.18 /opt/hbase
# 分发到 slave1/slave2
scp -r /opt/hbase slave1:/opt/
scp -r /opt/hbase slave2:/opt/
```
### 2. 配置环境变量(所有节点)
```bash
vim /etc/profile
# 添加以下内容
export HBASE_HOME=/opt/hbase
export PATH=$HBASE_HOME/bin:$PATH
# 生效
source /etc/profile
# 验证
hbase version
```
---
## 三、普通非HA版部署(单HMaster)
### 1. 核心配置文件(master节点配置,再分发)
#### ① hbase-env.sh
```bash
vim /opt/hbase/conf/hbase-env.sh
# 取消注释并修改
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk # 你的JDK路径
export HBASE_MANAGES_ZK=false # 禁用内置ZK,使用独立集群
```
#### ② hbase-site.xml(核心)
```bash
vim /opt/hbase/conf/hbase-site.xml
# 添加以下配置
<configuration>
<!-- 开启完全分布式 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- HBase数据存储在HDFS -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:8020/hbase</value> <!-- 对应Hadoop的fs.defaultFS -->
</property>
<!-- ZK集群地址(3节点) -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>master,slave1,slave2</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<!-- Master/RegionServer端口 -->
<property>
<name>hbase.master.info.port</name>
<value>16010</value>
</property>
<property>
<name>hbase.regionserver.info.port</name>
<value>16030</value>
</property>
</configuration>
```
#### ③ regionservers(指定所有RegionServer节点)
```bash
vim /opt/hbase/conf/regionservers
# 删除默认内容,添加
master
slave1
slave2
```
### 2. 分发配置到所有节点
```bash
scp /opt/hbase/conf/* slave1:/opt/hbase/conf/
scp /opt/hbase/conf/* slave2:/opt/hbase/conf/
```
### 3. 启动集群(顺序:ZK → Hadoop → HBase)
```bash
# 1. 启动ZK集群(所有节点)
zkServer.sh start
# 2. 启动Hadoop(master)
start-dfs.sh
start-yarn.sh
# 3. 启动HBase(master)
start-hbase.sh
```
### 4. 验证非HA集群
```bash
# 查看进程(master)
jps
# 应有:HMaster、HRegionServer
# 查看进程(slave1/slave2)
jps
# 应有:HRegionServer
# Web UI(浏览器访问)
http://master:16010 # HMaster管理页
# 命令行连接
hbase shell
list # 查看表列表(空则正常)
```
---
## 四、HA高可用版部署(双HMaster主备)
### 1. 基于非HA配置,仅新增**backup-masters**文件
```bash
# master节点操作
vim /opt/hbase/conf/backup-masters
# 添加备用Master主机名(每行一个)
slave1
```
### 2. 分发配置到所有节点
```bash
scp /opt/hbase/conf/backup-masters slave1:/opt/hbase/conf/
scp /opt/hbase/conf/backup-masters slave2:/opt/hbase/conf/
```
### 3. 重启HBase集群
```bash
# 停止(master)
stop-hbase.sh
# 启动(master)
start-hbase.sh
```
### 4. 验证HA集群
```bash
# 查看进程(master、slave1都有HMaster)
jps
# master:HMaster(Active)、HRegionServer
# slave1:HMaster(Standby)、HRegionServer
# slave2:HRegionServer
# Web UI 查看备Master
http://master:16010 → Backup Masters 显示 slave1
# 测试故障转移(可选)
# 杀死master的HMaster
kill -9 `jps | grep HMaster | awk '{print $1}'`
# 观察:slave1的HMaster自动变为Active,业务无中断
```
---
## 五、常见问题解决(必看)
### 1. HMaster启动失败
- 原因:**时间不同步** → 所有节点执行 `chronycMakestep` 同步时间
- 原因:**HDFS未启动** → 先 `start-dfs.sh`
- 原因:**ZK连接失败** → 检查 `hbase.zookeeper.quorum` 配置,ZK端口2181开放
### 2. RegionServer启动失败
- 原因:**HBase与Hadoop日志冲突** → 删除HBase的冲突jar包
```bash
rm -f /opt/hbase/lib/client-facing-thirdparty/slf4j-reload4j-1.7.33.jar
```
### 3. Web UI无法访问
- 关闭防火墙:`systemctl stop firewalld`
- 开放端口:`firewall-cmd --permanent --add-port=16010/tcp`
---
## 六、启停命令总结
### 启动顺序
```
ZK集群 → Hadoop集群 → HBase集群
```
```bash
# 一键启动(master)
start-hbase.sh
```
### 停止顺序
```
HBase集群 → Hadoop集群 → ZK集群
```
```bash
# 一键停止(master)
stop-hbase.sh
```
---





