hbase 集群搭建

本文详细指导了如何在Linux服务器上完全分布式安装Hadoop3.3.4和HBase2.4.17,包括下载、解压、配置环境变量、JVM优化、Zookeeper集群设置、HBase-site.xml配置以及客户端连接测试等内容,特别强调了版本兼容性和配置注意事项。
摘要由CSDN通过智能技术生成

1. 依赖

hadoop-hdfs hadoop3 完全分布式安装

zookeeper zookeeper 集群搭建

2. 下载安装包

选择自己想要的版本点击下载,笔者这里选择 2.4.17

image-20240407132126747

3. 上传解压

使用工具将安装包上传的服务器上

笔者这里选择 上传到 /opt/software 目录,解压到 /opt/module 这两个目录可以随意选择

image-20240407132255575

tar -zxvf hbase-2.4.17-bin.tar.gz -C /opt/module
cd /opt/module
mv hbase-2.4.17 hbase

image-20240407132325116

4. 修改相关配置

cd /opt/module/hbase/conf

4.1. hbase-env.sh

# 应用程序 PID 文件的存放路径,默认 /tmp,这里一定要修改,否则会被回收导致程序无法关闭等问题
export HBASE_PID_DIR=/opt/module/hbase/pids

# 关闭 hbase 内置的 zookeeper,我们需要使用自己搭建的集群
export HBASE_MANAGES_ZK=false

# 配置 master 节点内存大小(这里仅供学习使用所以配置较小,实际环境需要4g以上)
export HBASE_MASTER_OPTS="-Xms64m -Xmx128m"

# 配置 regionServer 节点内存大小(这里仅供学习使用所以配置较小,实际环境需要8g以上)
export HBASE_REGIONSERVER_OPTS="-Xms64m -Xmx128m"

4.2. JVM的一些优化参考(可忽略)

设置年轻代(Young Generation)的内存大小为512MB,它包含Eden区和两个Survivor区,主要用于存放新创建的对象

-Xmn512m

启用CMS(Concurrent Mark Sweep)垃圾回收器。CMS是一个并发的垃圾回收器,它旨在通过减小Full GC的暂停时间来优化应用程序的性能。但是在正常的内存回收中存在一定风险,但是我们的 REGIONSERVER 项目储存的基本都是数据,所以启用该回收器不会出现问题,同时能够提高垃圾回收的性能!但是,从Java 9开始,CMS已经被废弃,并且在后续的Java版本中不再可用。

-XX:+UseConcMarkSweepGC

CMS垃圾回收器在老年代空间使用率达到 70% 时触发并发标记阶段。意味着当老年代空间占用率达到 70% 时,CMS垃圾回收器将开始执行并发标记过程。这里是为了让 REGIONSERVER 服务尽快启动回收,并且设置为只有该种情况才触发标记,忽略其它情况

-XX:CMSInitiatingOccupancyFraction=70
-XX:+UseCMSInitiatingOccupancyOnly

启用ParNew垃圾回收器作为年轻代的垃圾回收器。ParNew是Serial垃圾回收器的并行版本,它使用多个线程来加速年轻代的垃圾回收过程。但是,请注意,从Java 9开始,ParNew垃圾回收器也不再被推荐使用,因为G1垃圾回收器已经成为了默认的垃圾回收器,并且在大多数情况下提供了更好的性能。

-XX:+UseParNewGC

组装起来为:(未验证,只是建议)

export HBASE_REGIONSERVER_OPTS="-Xms2g -Xmx10g -Xmn512m -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseParNewGC"

4.3. hbase-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>

    <!-- 设置 是否开启集群模式 -->
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    
    <!-- 设置 hdfs 访问路径 -->
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://mitchell-101:8020/hbase</value>
    </property> 
    
    <!-- 设置 zookeeper 的服务器集群地址 -->
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>mitchell-101:2181,mitchell-102:2181,mitchell-103:2181</value>
    </property>

    <!-- 设置 zookeeper 的会话超时时间,默认90000 (毫秒),建议设置为 20000 以上 -->
    <property>
        <name>zookeeper.session.timeout</name>
        <value>30000</value>
    </property>	
    
    <!-- 设置大合并的时间间隔,默认604800000秒 (7天),建议设置为 0,关闭自动合并,关闭后需要记得手动合并 -->
    <property>
        <name>hbase.hregion.majorcompaction</name>
        <value>604800000</value>
    </property>	
    
    <!-- 设置 HFile 文件的拆分上限值,10737418240 (10GB) ,可以设置为 21474836480 (20GB) -->
    <property>
        <name>hbase.hregion.max.filesize</name>
        <value>10737418240</value>
    </property>	    

</configuration>

4.3. backup-masters

这里配置作为 master 的服务器,可以配置多个从而达到高可用

mitchell-101

4.4. regionservers

这里配置作为

mitchell-101
mitchell-102
mitchell-103

5. 解决 Log4j 兼容性问题

这里是因为 hadoop 和 hbase 同时都有 slf4j 的实现,

而 hbase 底层是依赖 hadoop 的,所以在启动 hbase 时就会出现多实现冲突的问题

cd /opt/module/hbase/lib/client-facing-thirdparty
mv slf4j-reload4j-1.7.33.jar slf4j-reload4j-1.7.33.jar.bak

6. 分发程序包

其中 xsync 是一个分发脚本,在 hadoop 的安装教程中有脚本代码

cd /opt/module
xsync.sh hbase

7. 常用启停命令

cd /opt/module/hbase

# 启动集群
./bin/start-hbase.sh

# 关闭集群
./bin/stop-hbase.sh

# 单独启停 master
./bin/hbase-daemon.sh start master
./bin/hbase-daemon.sh stop master

# 单独启停 regionserver
./bin/hbase-daemon.sh start regionserver
./bin/hbase-daemon.sh stop regionserver

# 启动客户端连接(需要再 master 所在的服务器执行)
./bin/hbase shell

查看是否启动成功 => jpsall.sh

image-20240407134741576

8. 启停帮助脚本

vim mhbase.sh

#!/bin/bash

if [ $# -lt 1 ]
then
    echo "请输入参数 start 或者 stop"
    exit;
fi

case $1 in
"start")
    echo "=============================== 启动 hbase 集群 ==============================="
    /opt/module/hbase/bin/start-hbase.sh
;;
"stop")
    echo "=============================== 关闭 hbase 集群 ==============================="
    /opt/module/hbase/bin/stop-hbase.sh
;;
*)
	echo "请输入参数 start 或 stop"
;;
esac

9. 关于版本

hadoop 和 hbase 是可能存在版本冲突的,并且官方文档上说的相互兼容的版本也不是太靠谱

如果你检查了所有配置确定无误但是集群还是起不来的话,那很有可能就是版本问题了

笔者这里就遇到了日志里没有任何报错,但是启动集群时 regionservice 怎么都起不来的,访问 master 的网页也看不到 master 和 regionservice

同时 zookeeper 也明显少了很多东西,这里折腾了好久后面换了个版本发现就可以了,坑爹o(╯□╰)o

所以如果在安装的时候确定了配置什么都没有问题,那很可能就是版本的问题了

这里笔者推荐两个兼容的版本:hadoop 3.3.4 + hbase 2.4.17

由于 hadoop 是 hbase 的基础,这边建议的 hadoop 尽量不要安装过新的版本,因为新版的 hadoop,hbase 可能还没来得及兼容

10. JAVA 客户端连接测试

10.1. pom 依赖

<!-- hbase 客户端依赖,版本号尽量保持和集群的版本相同 -->
<dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase-client</artifactId>
    <version>2.4.17</version>
</dependency>

10.2. JAVA 代码

package com.mitchell.mus.tests.main;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;

import java.io.IOException;

public class HbaseTests {

    public static void main(String[] args) throws IOException {

        // 声明一个配置类,配置 hbase 集群连接的 zookeeper 集群的地址和端口
        Configuration configuration = HBaseConfiguration.create();
        configuration.set("hbase.zookeeper.quorum", "192.168.200.101,192.168.200.102,192.168.200.103");
        configuration.set("hbase.zookeeper.property.clientPort", "2181");

        // 创建连接
        Connection connection = ConnectionFactory.createConnection(configuration);

        // 获取元数据操作对象(主要用于对表结构的操作)
        Admin admin = connection.getAdmin();

        // 获取要操作的表名对象:命名空间,表明
        TableName tableName = TableName.valueOf("default", "b_student");

        // 判断表是否存在,TableName 的两个参数
        boolean flag = admin.tableExists(tableName);
        System.out.println(flag);
    }

}
  • 18
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值