前言
之前一直学的是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
总结
看书是入门,实战学习他人的项目代码结构和规约,思考总结学习