HBase 2.4.18 分布式集群搭建教程(适配 Hadoop 3.3.4 + ZooKeeper 3.5.6)

一、环境说明

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. 前置准备(必须完成)

  1. Hadoop 3.3.4 集群正常运行start-dfs.shstart-yarn.sh 启动成功,jps 可看到 NameNode、DataNode 等进程

  2. ZooKeeper 3.5.6 集群正常运行 :3 节点 zkServer.sh start 启动成功,zkServer.sh status 显示 leader/follower

  3. 节点免密登录:hadoop1 可免密登录 hadoop2、hadoop3

  4. 主机名映射 :3 台节点 /etc/hosts 已配置主机名与 IP 对应

  5. 防火墙与 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

  1. 启动 Hadoop 集群(仅在 hadoop1 操作)

    Bash 复制代码
    start-dfs.sh
    start-yarn.sh
  2. 启动 ZooKeeper 集群(3 台节点均执行)

    Bash 复制代码
    zkServer.sh start
  3. 启动 HBase 集群(仅在 hadoop1 操作)

    Bash 复制代码
    start-hbase.sh

2. 启动验证

2.1 进程检查(3 台节点分别执行 jps
  • hadoop1 正常进程NameNodeResourceManagerQuorumPeerMainHMasterHRegionServer

  • hadoop2 正常进程DataNodeNodeManagerQuorumPeerMainHMasterHRegionServer

  • hadoop3 正常进程DataNodeNodeManagerQuorumPeerMainHRegionServer

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.shJAVA_HOME 路径配置错误

解决方案

  1. 执行 echo $JAVA_HOME 查看真实 JDK 路径

  2. 修改 hbase-env.sh 中的 JAVA_HOME 为真实路径

  3. 同步修改后的文件到 hadoop2、hadoop3

  4. 重启 HBase 集群

2. HBase 无法连接 ZooKeeper

原因 :ZooKeeper 未启动、端口被占用、hbase.zookeeper.quorum 配置错误

解决方案

  1. 检查 3 台节点 ZooKeeper 状态:zkServer.sh status

  2. 确认 hbase-site.xml 中 ZooKeeper 地址与端口正确

  3. 关闭防火墙,确保 2181 端口开放

3. RegionServer 启动失败

原因 :Hadoop 未启动、hbase.rootdir 权限不足

解决方案

  1. 确认 HDFS 正常运行,创建 HBase 存储目录并授权:

    Bash 复制代码
    hdfs dfs -mkdir /hbase
    hdfs dfs -chown root:root /hbase
  2. 重启 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

六、版本与路径说明

  1. 版本兼容性:本教程仅适用于 HBase 2.4.18 + Hadoop 3.3.4 + ZooKeeper 3.5.6 组合,其他版本需调整配置

  2. 路径说明

    • 安装目录:/export/servers/ 为自定义目录,可根据实际环境修改

    • JDK 路径:/export/servers/jdk1.8.0_461 需替换为自己的 JDK 安装路径

    • HDFS 路径:hdfs://hadoop1:9000/hbase 需与 Hadoop core-site.xmlfs.defaultFS 保持一致

  3. 注意事项

    • 所有配置修改后必须同步到所有节点

    • 启动/停止必须严格遵循顺序,避免数据损坏

    • 生产环境建议使用普通用户操作,避免 root 权限风险

相关推荐
乐维_lwops13 小时前
Zabbix分布式监控体系架构设计与实战优化
分布式·zabbix
我是唐青枫15 小时前
C#.NET 分布式事务 深入解析:TCC、Saga、Outbox 与落地取舍
分布式·c#·.net
ClouderaHadoop19 小时前
漏洞扫描发现 Solr CVE-2017-12629 对 CDH 集群影响分析
hadoop·solr·lucene·cdh
少许极端20 小时前
消息队列4-RabbitMQ的高级特性-TTL机制、死信队列、延迟队列
分布式·消息队列·rabbitmq
m0_651593911 天前
仓储系统核心编码设计与分布式ID生成实践
大数据·分布式
014-code1 天前
RabbitMQ 生产端可靠投递(confirm、return、重试)
分布式·消息队列·rabbitmq
014-code1 天前
RabbitMQ 消费端幂等实战(重复消息、去重、重放怎么处理)
分布式·消息队列·rabbitmq
jasnet_u1 天前
kafka-3.8.0三节点集群(KRaft协议)
分布式·kafka
问道飞鱼1 天前
【分布式技术】分布式对象存储服务RustFS
分布式·对象存储·rustfs