CentOS 9 下 HBase 2.4.9 分布式集群安装与配置实战

前言

本文记录了在 CentOS 9 环境下,基于已有的 Hadoop 和 Zookeeper 集群,搭建 HBase 2.4.9 高可用(HA)分布式集群的完整过程。整个部署过程在三台节点上进行,包含环境准备、配置修改、分发、启动和验证等环节。文中也整理了部署中实际踩过的坑和一些配置细节,供参考。


一、环境说明

项目 版本 / 配置
操作系统 CentOS 9
JDK JDK 1.8.0_241
Hadoop Hadoop 3.x(已部署并运行)
Zookeeper Zookeeper 3.7.0(已部署并运行)
HBase HBase 2.4.9
节点规划 hadoop1(主 Master)、hadoop2(备用 Master + RegionServer)、hadoop3(RegionServer)

节点 IP 规划(/etc/hosts):

复制代码
192.168.121.160 hadoop1
192.168.121.161 hadoop2
192.168.121.162 hadoop3

前置条件

在开始安装 HBase 之前,必须确保以下组件已经部署并可正常使用:

  1. JDK 8:HBase 2.4.x 对 JDK 8 的依赖非常强,使用更高版本可能出现兼容性问题。
  2. Hadoop(HDFS):HBase 的数据存储在 HDFS 上,HDFS 必须处于正常运行状态。
  3. Zookeeper:HBase 使用 Zookeeper 进行集群协调,所有节点的 Zookeeper 实例都需要正常启动。

二、下载 HBase 安装包

在 hadoop1 节点上执行以下命令下载安装包到指定目录:

bash 复制代码
# 创建目录结构(如果尚未创建)
mkdir -p /export/software
mkdir -p /export/servers

# 进入软件下载目录
cd /export/software

# 使用 wget 下载 HBase 2.4.9(Apache 归档站)
# 如果提示 -bash: wget: command not found,先运行: dnf install wget -y
wget https://archive.apache.org/dist/hbase/2.4.9/hbase-2.4.9-bin.tar.gz

# 国内镜像源提速(华为云镜像)
wget https://mirrors.huaweicloud.com/apache/hbase/2.4.9/hbase-2.4.9-bin.tar.gz

说明: 以上两个下载地址任选其一即可。国内环境推荐使用华为云镜像,速度明显更快。


三、解压安装

将下载好的安装包解压到 /export/servers 目录:

bash 复制代码
tar -zxvf hbase-2.4.9-bin.tar.gz -C /export/servers/

解压后的安装路径为 /export/servers/hbase-2.4.9


四、配置环境变量

编辑 /etc/profile,将 HBase 的可执行文件路径加入系统 PATH:

bash 复制代码
vi /etc/profile

在文件末尾添加以下内容:

bash 复制代码
export HBASE_HOME=/export/servers/hbase-2.4.9
export PATH=$PATH:$HBASE_HOME/bin

使配置立即生效:

bash 复制代码
source /etc/profile

注意: 同时请确保 Hadoop 的环境变量也已正确配置。如果执行 hdfs 命令提示"未找到命令",说明 Hadoop 的 binsbin 路径没有加入 PATH。需要在 /etc/profile 中补充:

bash 复制代码
export HADOOP_HOME=/export/servers/hadoop-3.1.3  # 替换为实际路径
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

保存后同样执行 source /etc/profile 使其生效。这一步容易遗漏,但如果 hdfs 命令不通,HBase 将无法连接到 HDFS 存储数据,后续启动会直接报错。


五、修改 HBase 配置文件

进入 HBase 的配置目录:

bash 复制代码
cd /export/servers/hbase-2.4.9/conf

5.1 修改 hbase-env.sh

该文件用于指定 Java 环境以及 Zookeeper 管理方式。

bash 复制代码
vi hbase-env.sh

在文件底部添加以下内容:

bash 复制代码
# 设为 true,解决 HBase 和 Hadoop 的 jar 包冲突
export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP="true"

# 指定 JAVA_HOME 路径(通过 echo $JAVA_HOME 确认实际路径)
export JAVA_HOME=/export/servers/jdk1.8.0_241

# 设为 false,表示使用外部独立部署的 Zookeeper 集群
export HBASE_MANAGES_ZK=false

说明: JAVA_HOME 一定要填写本机实际的 JDK 安装路径,可以通过 echo $JAVA_HOME 命令确认。

5.2 修改 hbase-site.xml

这是 HBase 的核心参数配置文件。

bash 复制代码
vi hbase-site.xml

关于默认配置的处理: HBase 安装包自带的 hbase-site.xml 中,<configuration> 标签内包含一段单机模式的默认配置(hbase.cluster.distributed=falsehbase.tmp.dir=./tmphbase.unsafe.stream.capability.enforce=false),这些参数是给开发者单机测试用的。在部署分布式集群时,需要把这些默认配置删除或者用 XML 注释包裹起来,然后替换为集群配置,否则会产生冲突。

XML 的多行注释语法为 <!-- ... -->,可以把不需要的默认配置段整体包裹在注释中。也可以在 vi 中直接删除:将光标移到第一个 <property> 行,输入 dG 即可删除到文件末尾,再手动补上 </configuration> 标签。

<configuration> 标签内的内容替换为:

xml 复制代码
<configuration>
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://hadoop1:9000/hbase</value>
    </property>

    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>

    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
    </property>
</configuration>

关于端口号的确认: hbase.rootdir 中的端口 9000 必须与 Hadoop core-site.xmlfs.defaultFS 的端口一致。Hadoop 3.x 有些配置默认使用 8020,有些使用 9000,具体取决于安装时的设定。可以通过以下命令确认:

bash 复制代码
hdfs getconf -confKey fs.defaultFS

如果输出为 hdfs://hadoop1:8020,需要将 hbase-site.xml 中的端口改为 8020
关于 /etc/hosts hbase-site.xml 中使用了主机名(hadoop1、hadoop2、hadoop3),因此集群所有节点的 /etc/hosts 文件中必须正确配置了主机名到 IP 的映射关系。

5.3 修改 regionservers

该文件定义了集群的 RegionServer 节点。

bash 复制代码
vi regionservers

将内容修改为:

复制代码
hadoop2
hadoop3

注意: 需要删掉文件中默认的 localhost。每个主机名独占一行,行末不能有多余的空格或空行。

5.4 创建 backup-masters

为了实现高可用,需要配置一个备用 Master 节点。

bash 复制代码
vi backup-masters

添加内容:

复制代码
hadoop2

六、分发前配置检查

在将安装包分发到其他节点之前,强烈建议在 hadoop1 上做一次全面的配置检查,避免分发后在多台机器上重复修改错误。

6.1 检查 Java 环境

bash 复制代码
echo $JAVA_HOME

预期输出:/export/servers/jdk1.8.0_241

6.2 检查 HDFS 地址和端口

bash 复制代码
hdfs getconf -confKey fs.defaultFS

预期输出:hdfs://hadoop1:9000(必须与 hbase-site.xmlhbase.rootdir 的前缀一致)

6.3 检查主机名解析

bash 复制代码
cat /etc/hosts

确认 hadoop1、hadoop2、hadoop3 对应的 IP 地址配置正确。

6.4 检查服务进程

bash 复制代码
jps

至少应看到 NameNodeResourceManager(hadoop1 作为管理节点时)。在所有节点上运行,DataNode 必须在 hadoop2、hadoop3 上正常启动。

6.5 检查配置文件有效内容

可以使用以下命令快速检查各配置文件的有效内容(过滤注释行):

bash 复制代码
cat /export/servers/hbase-2.4.9/conf/hbase-env.sh | grep -v "^#"
cat /export/servers/hbase-2.4.9/conf/hbase-site.xml
cat /export/servers/hbase-2.4.9/conf/regionservers
cat /export/servers/hbase-2.4.9/conf/backup-masters

常见配置错误提醒

  • 空格问题: regionserversbackup-masters 中主机名后面不能有空格或多余空行。
  • 端口不一致: hbase.rootdir 的端口必须与 Hadoop fs.defaultFS 端口一致,这是最容易出问题的地方。
  • hdfs 命令不可用: 如果 Hadoop 的 bin 路径没加入 PATH,hdfs 命令不通,HBase 启动会直接失败。

七、分发安装包到其他节点

确认配置无误后,将 hadoop1 上配置好的 HBase 分发到 hadoop2 和 hadoop3。需要提前配置好 SSH 免密登录。

bash 复制代码
# 分发到 hadoop2
scp -r /export/servers/hbase-2.4.9 root@hadoop2:/export/servers/

# 分发到 hadoop3
scp -r /export/servers/hbase-2.4.9 root@hadoop3:/export/servers/

分发后必做: 在 hadoop2 和 hadoop3 上也需要配置 HBase 的环境变量。分别编辑各节点的 /etc/profile,添加 HBASE_HOMEPATH 配置(与第四节相同),并执行 source /etc/profile 使其生效。


八、启动 HBase 集群

启动顺序很重要,必须严格遵守以下顺序:

  1. 启动 Zookeeper(在所有节点上执行):
bash 复制代码
zkServer.sh start

注意: Zookeeper 需要在每个节点上单独启动(hadoop1、hadoop2、hadoop3 都要执行)。如果只在一个节点上启动就直接启动 HBase,集群协调会出现问题。

  1. 启动 Hadoop (在 NameNode 所在节点执行 start-all.sh 或分别启动 HDFS 和 YARN)。

  2. 启动 HBase(只需在主节点 hadoop1 上执行):

bash 复制代码
start-hbase.sh

正常启动后终端会输出类似如下信息:

复制代码
running master, logging to /export/servers/hbase-2.4.9/logs/hbase-root-master-hadoop1.out
hadoop2: running regionserver, logging to /export/servers/hbase-2.4.9/bin/../logs/hbase-root-regionserver-hadoop2.out
hadoop3: running regionserver, logging to /export/servers/hbase-2.4.9/bin/../logs/hbase-root-regionserver-hadoop3.out
hadoop2: running master, logging to /export/servers/hbase-2.4.9/bin/../logs/hbase-root-master-hadoop2.out

可以看到 hadoop1 启动了 HMaster,hadoop2 启动了 RegionServer 和备用 Master,hadoop3 启动了 RegionServer,符合预期的节点规划。


九、安装结果验证

9.1 命令行验证(jps)

在各节点分别执行 jps,检查进程状态:

hadoop1(主 Master):

复制代码
12836 NameNode
13863 HMaster
13692 QuorumPeerMain
13246 ResourceManager

hadoop2(备用 Master + RegionServer):

应看到 HMasterHRegionServerQuorumPeerMain

hadoop3(RegionServer):

应看到 HRegionServerQuorumPeerMain

补充说明: 如果 jps 输出中没有看到 DataNode,需要确认该节点的角色规划。如果 hadoop1 只做管理节点,不跑 DataNode 是正常的;但 hadoop2 和 hadoop3 上 DataNode 必须处于启动状态,否则 HBase 虽能启动 Master,但无法正常读写数据。

9.2 Web UI 验证

通过浏览器访问 HBase 的 Web 管理界面:

  • 主 Master 界面: http://192.168.121.160:16010
  • 备用 Master 界面: http://192.168.121.161:16010

页面上应能看到:

  • Region Servers 列表中显示 hadoop2 和 hadoop3。
  • Backup Masters 列表中显示 hadoop2。

防火墙提示: CentOS 9 默认启用了防火墙。如果浏览器无法访问 16010 端口,可以临时关闭防火墙进行测试:

bash 复制代码
systemctl stop firewalld

9.3 HBase Shell 验证

进入 HBase 命令行交互终端:

bash 复制代码
hbase shell

执行以下命令确认集群状态:

复制代码
status

预期输出应显示 2 个 RegionServer。

复制代码
list

当前应为空表列表(刚安装完毕)。

输入 exit 退出 Shell。


十、常见问题与避坑说明

10.1 hdfs 命令未找到

现象: 执行 hdfs getconf -confKey fs.defaultFS 时提示 -bash: hdfs:未找到命令

原因: Hadoop 的 binsbin 路径没有添加到 /etc/profile 中的 PATH 变量。

解决:/etc/profile 中添加 Hadoop 的环境变量并 source 生效,具体见第四节的注意事项。

10.2 hbase-site.xml 默认配置冲突

现象: hbase-site.xml 中同时存在默认的 hbase.cluster.distributed=false 和手动添加的 hbase.cluster.distributed=true,导致配置冲突或行为不确定。

解决: 将默认的三个 <property> 配置块删除或用 XML 注释 <!-- ... --> 包裹起来,只保留集群所需的配置项。

10.3 HDFS 端口号不一致

现象: HBase 启动后无法连接 HDFS,日志报连接超时或拒绝。

原因: hbase-site.xmlhbase.rootdir 的端口(如 9000)与 Hadoop core-site.xmlfs.defaultFS 的实际端口(如 8020)不一致。

解决: 通过 hdfs getconf -confKey fs.defaultFS 确认实际端口,保持两边一致。

10.4 Zookeeper 未全部启动

现象: HBase 启动后 RegionServer 不断重启或无法注册。

原因: 只在部分节点启动了 Zookeeper,集群无法形成多数派。

解决: 确保 hbase-site.xmlhbase.zookeeper.quorum 配置的所有节点都已经执行了 zkServer.sh start

10.5 regionserversbackup-masters 格式问题

现象: 分发后启动时报节点找不到或连接失败。

原因: 文件中主机名后有多余的空格、Tab 或空行。

解决: 确保每行只有纯粹的主机名,无任何多余字符。


十一、日志优化建议

HBase 默认的日志级别为 INFO,运行时会产生大量日志输出,排查问题时反而不容易定位关键信息。可以将日志级别调整为 ERROR,只记录错误信息。

操作方法:

编辑 /export/servers/hbase-2.4.9/conf/log4j.properties,找到以下行:

复制代码
log4j.rootLogger=INFO,console

修改为:

复制代码
log4j.rootLogger=ERROR,console

建议: 在集群运行稳定后再做此调整。部署调试阶段建议保持 INFO 级别,方便排查问题。


结语

完成以上步骤后,一个三节点的 HBase HA 集群就部署完成了。整个过程中比较容易出问题的环节集中在环境变量配置(特别是 Hadoop 的 PATH)、hbase-site.xml 的默认配置清理、以及 HDFS 端口号的确认上。建议在分发之前一定要做一轮完整的配置预检,避免在多台机器上重复修改。

相关推荐
回家路上绕了弯1 天前
Claude Code Agent Team 全解析:AI 集群协作,重构代码开发新范式
人工智能·分布式·后端
漏刻有时1 天前
CentOS 不定时 OOM 根治方案:PHP-FPM 进程管控 + Swap 扩容 + 全维度监控
android·centos·php
初次攀爬者1 天前
Redis与数据库的数据一致性方案解析
数据库·redis·分布式
EAIReport1 天前
MongoDB、Redis、HBase 三大NoSQL数据库:核心区别与选型指南
redis·mongodb·hbase
切糕师学AI1 天前
Kubernetes Operator 详解
运维·分布式·云原生·容器·kubernetes·自动化·运维自动化
梵得儿SHI1 天前
Spring Cloud 高并发订单服务实战:从创建流程优化到 Seata 分布式事务落地(附代码 + 架构图)
分布式·spring·spring cloud·高并发·异步削峰·完整解决方案·限流降级
runepic1 天前
GeoServer在CentOS部署中文乱码显示方框终极解决方案
linux·运维·centos·geoserver
阿坤带你走近大数据1 天前
大数据处理与分布式存储的各自介绍
分布式·云原生·实时数仓·存储·数据处理·数据湖仓
yatum_20141 天前
集群节点时钟同步(NTP)配置手册
linux·分布式·hbase
筱顾大牛1 天前
点评项目---分布式锁
java·redis·分布式·缓存·idea