一、环境说明
1. 版本兼容性
本教程基于以下稳定版本组合,严格遵循 Apache 官方兼容性要求,避免版本不兼容导致的启动失败:
| 组件 | 版本 | 说明 |
|---|---|---|
| Hadoop | 3.3.4 | 已完成分布式集群搭建,HDFS 正常运行 |
| HBase | 2.4.18 | 2.4 系列最新稳定版,完美兼容 Hadoop 3.3.x |
| ZooKeeper | 3.5.6 | 已完成分布式集群搭建,3 节点正常运行 |
| JDK | 1.8.0_461 | HBase 2.x 官方推荐 JDK 版本,不支持 JDK 11 生产环境 |
| 操作系统 | CentOS 7+ | 3 台虚拟机,root 用户操作 |
2. 集群节点规划
| 主机名 | IP 地址 | 角色 |
|---|---|---|
| hadoop1 | <192.168.121.11> | HMaster(主)、RegionServer、NameNode、ResourceManager、ZooKeeper |
| hadoop2 | <192.168.121.12> | BackupMaster(备)、RegionServer、DataNode、NodeManager、ZooKeeper |
| hadoop3 | <192.168.121.13> | RegionServer、DataNode、NodeManager、ZooKeeper |
3. 前置准备(必须完成)
-
Hadoop 3.3.4 集群正常运行 :
start-dfs.sh、start-yarn.sh启动成功,jps可看到 NameNode、DataNode 等进程 -
ZooKeeper 3.5.6 集群正常运行 :3 节点
zkServer.sh start启动成功,zkServer.sh status显示 leader/follower -
节点免密登录:hadoop1 可免密登录 hadoop2、hadoop3
-
主机名映射 :3 台节点
/etc/hosts已配置主机名与 IP 对应 -
防火墙与 SELinux 关闭:避免端口拦截导致集群通信失败
Bash# 3 台节点均执行 systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
二、HBase 安装部署
1. 下载与解压(仅在 hadoop1 操作)
1.1 上传安装包
将 hbase-2.4.18-bin.tar.gz 上传至 hadoop1 的 /root 目录,移动到统一安装目录:
Bash
# 移动安装包到 /export/servers(自定义安装目录,可根据实际修改)
mv /root/hbase-2.4.18-bin.tar.gz /export/servers/
# 进入安装目录
cd /export/servers/
# 解压安装包
tar -zxvf hbase-2.4.18-bin.tar.gz
# 重命名为 hbase,方便后续操作
mv hbase-2.4.18 hbase
1.2 配置环境变量(3 台节点均执行)
编辑 /etc/profile,添加 HBase 环境变量:
Bash
vi /etc/profile
在文件末尾添加以下内容:
Bash
# HBase 环境变量
export HBASE_HOME=/export/servers/hbase
export PATH=$PATH:$HBASE_HOME/bin
使环境变量生效:
Bash
source /etc/profile
2. 核心配置文件修改(仅在 hadoop1 操作)
2.1 配置 hbase-env.sh
编辑 /export/servers/hbase/conf/hbase-env.sh,在文件末尾添加以下配置:
Bash
# 配置 JDK 路径(必须修改为自己实际的 JAVA_HOME)
export JAVA_HOME=/export/servers/jdk1.8.0_461
# 禁用 HBase 内置 ZooKeeper,使用外部独立 ZooKeeper 集群(核心配置)
export HBASE_MANAGES_ZK=false
# 禁用 Hadoop 类路径自动查找,避免版本冲突
export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP="true"
2.2 配置 hbase-site.xml(最核心配置)
编辑 /export/servers/hbase/conf/hbase-site.xml,完全替换原有内容为以下配置:
XML
<configuration>
<!-- HBase 数据在 HDFS 上的存储路径,与 Hadoop core-site.xml 中 fs.defaultFS 保持一致 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop1:9000/hbase</value>
</property>
<!-- 启用分布式模式,单机模式为 false -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- ZooKeeper 集群地址,填写 3 台节点主机名 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop1,hadoop2,hadoop3</value>
</property>
<!-- ZooKeeper 客户端端口,默认 2181,无需修改 -->
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<!-- 解决 Hadoop 3.x 与 HBase WAL 兼容性问题(必加) -->
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
</configuration>
2.3 配置 regionservers
编辑 /export/servers/hbase/conf/regionservers,删除默认内容,填写所有 RegionServer 节点主机名:
Plain
hadoop1
hadoop2
hadoop3
3. 同步配置到其他节点(仅在 hadoop1 操作)
将配置好的 HBase 安装目录同步到 hadoop2、hadoop3:
Bash
cd /export/servers
scp -r hbase hadoop2:$PWD
scp -r hbase hadoop3:$PWD
三、集群启动与验证
1. 启动顺序(严格遵循,避免启动失败)
必须先启动 Hadoop 和 ZooKeeper,再启动 HBase:
-
启动 Hadoop 集群(仅在 hadoop1 操作)
Bashstart-dfs.sh start-yarn.sh -
启动 ZooKeeper 集群(3 台节点均执行)
BashzkServer.sh start -
启动 HBase 集群(仅在 hadoop1 操作)
Bashstart-hbase.sh
2. 启动验证
2.1 进程检查(3 台节点分别执行 jps)
-
hadoop1 正常进程 :
NameNode、ResourceManager、QuorumPeerMain、HMaster、HRegionServer -
hadoop2 正常进程 :
DataNode、NodeManager、QuorumPeerMain、HMaster、HRegionServer -
hadoop3 正常进程 :
DataNode、NodeManager、QuorumPeerMain、HRegionServer
2.2 Web UI 验证
浏览器访问 HMaster Web 界面:http://hadoop1:16010
-
可看到 3 台 RegionServer 全部在线
-
Backup Masters 显示 hadoop2 正常运行
-
集群状态正常,无异常告警
2.3 命令行测试
进入 HBase Shell 测试基本操作:
Bash
hbase shell
# 创建表
create 'test', 'cf'
# 查看表
list
# 插入数据
put 'test', 'row1', 'cf:name', 'zhangsan'
# 查询数据
scan 'test'
# 退出
exit
四、常见问题与解决方案
1. 启动报错:/xxx/jdk1.8.0_xxx/bin/java: 没有那个文件或目录
原因 :hbase-env.sh 中 JAVA_HOME 路径配置错误
解决方案:
-
执行
echo $JAVA_HOME查看真实 JDK 路径 -
修改
hbase-env.sh中的JAVA_HOME为真实路径 -
同步修改后的文件到 hadoop2、hadoop3
-
重启 HBase 集群
2. HBase 无法连接 ZooKeeper
原因 :ZooKeeper 未启动、端口被占用、hbase.zookeeper.quorum 配置错误
解决方案:
-
检查 3 台节点 ZooKeeper 状态:
zkServer.sh status -
确认
hbase-site.xml中 ZooKeeper 地址与端口正确 -
关闭防火墙,确保 2181 端口开放
3. RegionServer 启动失败
原因 :Hadoop 未启动、hbase.rootdir 权限不足
解决方案:
-
确认 HDFS 正常运行,创建 HBase 存储目录并授权:
Bashhdfs dfs -mkdir /hbase hdfs dfs -chown root:root /hbase -
重启 HBase 集群
五、集群停止与维护
1. 停止顺序(严格遵循)
Bash
# 1. 停止 HBase 集群(仅在 hadoop1 操作)
stop-hbase.sh
# 2. 停止 ZooKeeper 集群(3 台节点均执行)
zkServer.sh stop
# 3. 停止 Hadoop 集群(仅在 hadoop1 操作)
stop-yarn.sh
stop-dfs.sh
2. 开机自启配置
将启动命令写入 /etc/rc.local,实现集群开机自动启动(3 台节点均配置):
Bash
vi /etc/rc.d/rc.local
添加以下内容:
Bash
# hadoop1 节点添加
su root -c "/export/servers/hadoop-3.3.4/sbin/start-dfs.sh"
su root -c "/export/servers/hadoop-3.3.4/sbin/start-yarn.sh"
su root -c "/export/servers/zookeeper-3.5.6/bin/zkServer.sh start"
su root -c "/export/servers/hbase/bin/start-hbase.sh"
# hadoop2、hadoop3 节点添加
su root -c "/export/servers/zookeeper-3.5.6/bin/zkServer.sh start"
赋予执行权限:
Bash
chmod +x /etc/rc.d/rc.local
六、版本与路径说明
-
版本兼容性:本教程仅适用于 HBase 2.4.18 + Hadoop 3.3.4 + ZooKeeper 3.5.6 组合,其他版本需调整配置
-
路径说明:
-
安装目录:
/export/servers/为自定义目录,可根据实际环境修改 -
JDK 路径:
/export/servers/jdk1.8.0_461需替换为自己的 JDK 安装路径 -
HDFS 路径:
hdfs://hadoop1:9000/hbase需与 Hadoopcore-site.xml中fs.defaultFS保持一致
-
-
注意事项:
-
所有配置修改后必须同步到所有节点
-
启动/停止必须严格遵循顺序,避免数据损坏
-
生产环境建议使用普通用户操作,避免 root 权限风险
-