HBase完全分布式部署详细教程(含HA高可用版+普通非HA版)
前言
本文详细记录两种HBase完全分布式集群的搭建流程:一是基于Hadoop HA(高可用)集群的HBase高可用部署 (含备用HMaster),二是普通非HA版HBase完全分布式部署,涵盖安装包部署、配置文件修改、冲突问题解决、集群启停顺序等核心内容,步骤清晰可落地,适合大数据初学者参考实践。
环境准备
- 集群节点:
master(主节点)、slave1(从节点1)、slave2(从节点2) - 软件版本:JDK1.8.0_261、Hadoop3.1.4(HA/非HA模式)、HBase2.2.2、Zookeeper3.5.6
- 前提条件:对应模式的Hadoop集群、Zookeeper集群已正常部署并可使用
一、HBase高可用版(基于Hadoop HA)部署流程
1. 安装包部署
(1)上传并解压HBase安装包
将hbase-2.2.2-bin.tar.gz上传至master节点的/opt/software目录,执行解压命令:
bash
# 解压至/opt/module目录
tar -zxvf /opt/software/hbase-2.2.2-bin.tar.gz -C /opt/module
(2)配置系统环境变量
编辑系统环境变量配置文件,添加HBase相关路径:
bash
# 编辑环境变量文件
vim /etc/profile
在文件末尾添加以下配置:
bash
# HBase环境变量
export HBASE_HOME=/opt/module/hbase-2.2.2
export PATH=$PATH:$HBASE_HOME/bin
使环境变量立即生效:
bash
source /etc/profile
(3)验证HBase环境配置
执行版本查看命令,确认环境配置正常:
bash
hbase version
若输出HBase版本信息(2.2.2),说明环境变量配置成功。
2. 核心配置文件修改
进入HBase配置目录,依次修改以下核心配置文件:
bash
cd /opt/module/hbase-2.2.2/conf
(1)配置hbase-env.sh
编辑hbase-env.sh文件,指定JDK路径并关闭HBase自带Zookeeper:
bash
vim hbase-env.sh
添加/修改以下配置:
bash
# 指定JDK安装路径
export JAVA_HOME=/opt/module/jdk1.8.0_261
# 解决Hadoop与HBase类路径冲突问题
export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP="true"
# 关闭HBase自带Zookeeper(完全分布式集群需使用独立Zookeeper集群)
export HBASE_MANAGES_ZK=false
(2)配置hbase-site.xml
编辑hbase-site.xml文件,添加集群分布式配置、存储路径、Zookeeper关联等核心配置:
bash
vim hbase-site.xml
在<configuration>标签内添加以下配置:
xml
<property>
<!-- 启用HBase分布式集群模式 -->
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<!-- HBase临时文件存储目录 -->
<name>hbase.tmp.dir</name>
<value>/opt/module/hbase-2.2.2/tmp</value>
</property>
<property>
<!-- 关闭流能力强制检查,避免启动异常 -->
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
<property>
<!-- HBase数据存储根目录(关联Hadoop HA的NameNode地址) -->
<name>hbase.rootdir</name>
<value>hdfs://master:8020/hbase</value>
</property>
<property>
<!-- Zookeeper集群节点配置(与ZooKeeper集群节点一致) -->
<name>hbase.zookeeper.quorum</name>
<value>master,slave1,slave2</value>
</property>
<property>
<!-- Zookeeper数据存储目录(与zoo.cfg中配置一致) -->
<name>hbase.zookeeper.property.dataDir</name>
<value>/opt/module/zookeeper-3.5.6/data</value>
</property>
<property>
<!-- HMaster端口配置(0.98版本后新增,默认60000,此处改为16000) -->
<name>hbase.master.port</name>
<value>16000</value>
</property>
(3)配置regionservers
编辑regionservers文件,指定HBase RegionServer节点:
bash
vim regionservers
添加以下节点名称(与Hadoop集群节点一致):
master
slave1
slave2
(4)配置备用HMaster(实现HMaster高可用)
创建并编辑backup-masters文件,指定备用HMaster节点(此处选择slave1):
bash
# 创建备用HMaster配置文件
vim backup-masters
添加备用节点:
slave1
3. 远程分发配置文件与安装包
将master节点的HBase安装包和相关配置文件分发至slave1、slave2节点,确保集群各节点配置一致。
bash
# 1. 分发环境变量配置文件
scp -r /etc/profile slave1:/etc
scp -r /etc/profile slave2:/etc
# 2. 分发HBase安装包
scp -r /opt/module/hbase-2.2.2 slave1:/opt/module
scp -r /opt/module/hbase-2.2.2 slave2:/opt/module
# 3. 分发备用HMaster配置文件
scp -r /opt/module/hbase-2.2.2/conf/backup-masters slave1:/opt/module/hbase-2.2.2/conf
scp -r /opt/module/hbase-2.2.2/conf/backup-masters slave2:/opt/module/hbase-2.2.2/conf
# 4. 各节点生效环境变量(slave1、slave2分别执行)
source /etc/profile
4. 集群启动与验证
(1)启动方式
bash
# 方式1:单节点逐个启动
bin/hbase-daemon.sh start master
bin/hbase-daemon.sh start regionserver # 所有节点分别执行
# 方式2:集群批量启动(推荐)
./start-hbase.sh
(2)状态验证
- 进程查看:
master节点有HMaster,slave1节点有HMaster(备用)+HRegionServer,slave2节点有HRegionServer - Web UI访问:
http://master:16010/master-status - 命令行验证:
hbase shell - Hadoop NameNode状态检查:
hdfs haadmin -getServiceState nn1(需确保nn1为Active)
二、HBase普通完全分布式(非HA版)部署流程
1. 核心区别说明
与HA版相比,普通非HA版无需配置备用HMaster,且不依赖Hadoop HA集群,仅需普通Hadoop完全分布式环境即可部署,配置更简洁。
2. 安装包部署(与HA版一致)
(1)上传并解压HBase安装包
bash
# 解压至/opt/module目录
tar -zxvf /opt/software/hbase-2.2.2-bin.tar.gz -C /opt/module
(2)配置系统环境变量
bash
# 编辑环境变量文件
vim /etc/profile
添加以下配置:
bash
# HBase环境变量
export HBASE_HOME=/opt/module/hbase-2.2.2
export PATH=$PATH:$HBASE_HOME/bin
使环境变量生效:
bash
source /etc/profile
(3)验证环境配置
bash
hbase version
3. 核心配置文件修改
进入HBase配置目录:
bash
cd /opt/module/hbase-2.2.2/conf
(1)配置hbase-env.sh
bash
vim hbase-env.sh
添加以下配置:
bash
# 指定JDK安装路径
export JAVA_HOME=/opt/module/jdk1.8.0_261
# 解决Hadoop与HBase类路径冲突问题
export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP="true"
# 关闭HBase自带Zookeeper
export HBASE_MANAGES_ZK=false
# 指定HBase类路径
export HBASE_CLASSPATH=/opt/module/hbase-2.2.2/conf
(2)配置hbase-site.xml
bash
vim hbase-site.xml
在<configuration>标签内添加以下配置:
xml
<configuration>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>/opt/module/hbase-2.2.2/tmp</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>master,slave1,slave2</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:8020/hbase</value>
</property>
<property>
<!-- 0.98 后的新变动,之前版本没有.port,默认端口为 60000 -->
<name>hbase.master.port</name>
<value>16000</value>
</property>
</configuration>
(3)配置regionservers
bash
vim regionservers
添加节点名称:
master
slave1
slave2
4. 远程分发文件
bash
# 1. 分发HBase安装包
scp -r hbase-2.2.2/ slave1:/opt/module/
scp -r hbase-2.2.2/ slave2:/opt/module/
# 2. 分发环境变量配置文件
scp -r /etc/profile slave1:/etc/profile
scp -r /etc/profile slave2:/etc/profile
# 3. 各节点生效环境变量(slave1、slave2分别执行)
source /etc/profile
5. 集群启动与验证
(1)启动方式
bash
# 方式1:单节点逐个启动
bin/hbase-daemon.sh start master # 仅master节点执行
bin/hbase-daemon.sh start regionserver # master、slave1、slave2分别执行
# 方式2:集群批量启动(推荐)
start-hbase.sh
(2)状态验证
- 进程查看:
master节点有HMaster+HRegionServer,slave1、slave2节点仅有HRegionServer - Web UI访问:
http://master:16010/master-status - 命令行验证:
hbase shell
三、通用问题解决:SLF4J多绑定冲突
1. 报错信息
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/module/hadoop-3.1.4/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/module/hbase-2.2.2/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory ]
2. 解决步骤
所有集群节点(master、slave1、slave2)统一执行以下命令:
bash
# 进入HBase第三方依赖目录
cd /opt/module/hbase-2.2.2/lib/client-facing-thirdparty/
# 重命名冲突JAR包,避免重复绑定
mv slf4j-log4j12-1.7.25.jar slf4j-log4j12-1.7.25.jar.copy
四、集群启停顺序(通用)
1. 启动顺序(必须严格遵循)
bash
# 1. master节点启动HDFS集群
master: start-dfs.sh
# 2. (可选)master节点启动JobHistory服务
master: mr-jobhistory-daemon.sh start historyserver
# 3. master节点启动YARN集群
master: start-yarn.sh
# 4. 所有节点启动Zookeeper(master、slave1、slave2分别执行)
master/slave1/slave2: zkServer.sh start
# 5. master节点启动HBase集群
master: start-hbase.sh
2. 关闭顺序(与启动顺序相反)
bash
# 1. master节点关闭HBase集群
master: stop-hbase.sh
# 2. 所有节点关闭Zookeeper(master、slave1、slave2分别执行)
master/slave1/slave2: zkServer.sh stop
# 3. (可选)master节点关闭JobHistory服务
master: mr-jobhistory-daemon.sh stop historyserver
# 4. master节点关闭YARN集群
master: stop-yarn.sh
# 5. master节点关闭HDFS集群
master: stop-dfs.sh
五、注意事项
- HBase集群启动依赖Hadoop NameNode为Active状态(HA版需确保主NN为Active,非HA版需确保NN正常运行)。
- 所有配置文件修改后,必须分发至所有集群节点,避免配置不一致导致启动失败。
- 若HMaster无法启动,优先检查
hbase-site.xml路径配置、Zookeeper集群可用性、环境变量是否生效。 - HA版备用HMaster配置完成后,需重启HBase集群才能生效;非HA版无备用HMaster,若主HMaster故障需手动重启。
- SLF4J冲突问题需在所有节点执行重命名操作,仅单节点处理会导致集群启动异常。