HBase开发总结

前言

之前一直学的是HBase的Shell基本操作和API基本操作,对于一个项目中如何对HBase数据库进行CRUD操作 没有宏观的代码框架设计,所以根据实际项目中的应用进行总结,不定时更新~

开发过程记录

1. 宏观的一个框架

Java端对HBase的操作基本其实就是:

1. 获取Configuration,基本两个:HBase的节点以及ZooKeeper端口号

2. 获取Connection

3. 获取Admin进行DDL操作/获取Table进行DML操作。其中DDL操作主要是指对HBase表本身的操作,例如创建表、修改列族属性、禁用表、删除表;DML操作主要是指对HBase表数据的操作,例如插入数据、查询数据、删除数据等。

但是一个项目中需要考虑的点就比较多,要考虑到代码的间接性、高性能、线程安全、低冗余等方面,所以如何在一个项目中写出一个比较好的hbase操作框架其实是很重要的。在此根据项目中学习的框架在此梳理记录一下,之后遇到更好的会及时更新。

1. 编写一个HBase配置类

配置类的作用就是配置HConfiguration和HConnection,一般项目中为了避免每次CURD操作都创建一个Connection连接,会使用线程池,例如指定池子中有10个连接,每次操作都从池子中获取连接,使用结束后将连接归还即可。

{
    //类中的方法
    private static Configuration configuration = null;
    
    private static Connection connection = null;

    //创建线程池
    private ExecutorService executorService = new ScheduledThreadPoolExecutor(10);//具体创什么线程根据需求自行修改

    static{
        //关于端口和IP的配置
        configuration = HConfiguration.create();
        configuration.set("hbase.zookeeper.quorum","xxxx,xxx,xxx");
        configuration.set("hbase.zookeeper.property.clientPort","2181");
    }

    //其他类可以通过此方法获取配置
    getConf(){
    //...
    }  

    //获取连接
    getConnection(){
        if (connection == null || connection.isClosed()) {
            synchronized (this) {
                if (connection == null || connection.isClosed()) {
                    connection = ConnectionFactory.createConnection(configuration,executorService);
                }
            }
        }
    //...
    }
}

2. 根据业务需求编写对HBase数据库CRUD操作类

一般就是对HBase的CRUD操作类,如果对表名/行键有时间要求,还会加一个时间处理工具类,单独处理根据时间间隔过滤表的方法。

例如一个scan操作类中,包括根据RowKey过滤、根据Qulifier过滤、根据StartRow和EndRow过滤等...

例如一个判断表是否存在的类中,一般会在初始化的时候对hbase做一次全库扫描获取全部的表并将其存入到一个Set集合中,并且在每次创建一个表的时候会插入一条表名到这个Set集合中。其他地方直接查询这个Set集合即可知数据库中表是否存在。

3. 编写一个总类,通过将new 配置类和CRUD类作为该类的static属性,隔离业务类和配置类、操作类。

编写总类的好处是,业务端调用HBase相关操作的时候不用暴露这些操作类,也不用频繁的手动new对象,比较方便。

{
    //初始化一个CRUD类对象
    private static HBaseScanOP HBASESCANOP = new HBaseScanOP();

    //给其他类提供接口调用这个对象
    public static HBaseScanOP getHBaseScanOP(){
        return HBASESCANOP;
    }
}

4. 根据业务需求编写具体的对HBase操作类(提供参数,进行CRUD操作后返回结果)

例如查询某张表中最新的一条数据,那么这个方法中需要做的首先根据提供的表名 查看数据库中这张表是否存在(调用CRUD操作类中的涉及 判断表是否存在的方法),如果存在遍历这张表查询最新的一条数据(调用CRUD操作类中涉及 扫描表的方法)。

拓展

1. 将hbase数据导入到文本文档中:在hbase/bin/目录下执行 echo "scan 'table_name' " ./hbase shell > xxx.txt

如果需要对scan加过滤或者其他条件直接加即可,注意有时需要加转义字符

echo "scan 'hbase_test',{FILTER=>\"SingleColumnValueFilter('f','devmac',=,'substring:3524')\"}" | ./hbase shell > myTest.txt

 https://blog.csdn.net/liuxiao723846/article/details/59486401

2. HBase API 查询操作:https://blog.csdn.net/qq_28059559/article/details/86132483

3. 执行脚本文档对HBase进行操作:在hbase/bin/目录下执行 ./hbase shell xxx.txt

https://blog.csdn.net/wild46cat/article/details/53256230?utm_source=blogxgwz5 

总结

看书是入门,实战学习他人的项目代码结构和规约,思考总结学习

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值