HBase的JAVA客户端API简单使用,及工具类编写

package com.utils;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class HBaseUtil {/*** 连接HBase* @return*/public static Connection getHBaseConnection() throws Exception {Configuration conf = HBaseConfiguration.create();conf.set("hbase.zookeeper.quorum","j01:2181,j02:2181,j03:2181");Connection conn = ConnectionFactory.createConnection(conf);return conn;}/*** 获取admin对象* @return* @throws Exception*/public static Admin getHBaseAmin(Connection conn) throws Exception {return conn.getAdmin();}/*** 获取表对象* @param tablename* @return* @throws Exception*/public static Table getHBaseTableName(Connection conn,String tablename) throws Exception {Table table = conn.getTable(TableName.valueOf(tablename));return table;}/*** 展示单元格数据* @param result*/public  static  void showData(Result result){while(result.advance()){Cell cell = result.current();String row = new String(CellUtil.cloneRow(cell));String family = new String(CellUtil.cloneFamily(cell));String qualifier = new String(CellUtil.cloneQualifier(cell));String value = new String(CellUtil.cloneValue(cell));System.out.println(row+"->"+family+":"+qualifier+"->"+value);}}/*** 删除指定表* @param tablename* @throws Exception*/public  static void deleteTable(String tablename) throws Exception {// 创建Admin对象Admin admin = HBaseUtil.getHBaseAmin(HBaseUtil.getHBaseConnection());// 获取表TableName tb = TableName.valueOf("tablename");// 判断表是否存在,存在则删除if(admin.tableExists(tb)){// 禁用表admin.disableTable(tb);// 判断是否禁用,禁用则删除if (admin.isTableDisabled(tb)){admin.deleteTable(tb);}else{System.out.println("please disable table:" + tablename);}}else{System.out.println("this table:" + tablename + " is not exits");}// 释放资源admin.close();}/*** 修改表结构:修改列族的版本属性* @param tableName* @param columnFamilyName* @param columnFamilyVersion* @throws Exception*/public static void modifyTableStructrue(String tableName,String columnFamilyName,int columnFamilyVersion) throws Exception {// 创建Admin对象Admin admin = HBaseUtil.getHBaseAmin(HBaseUtil.getHBaseConnection());// 创建列族描述器对象ColumnFamilyDescriptorBuilder cfdb = ColumnFamilyDescriptorBuilder.newBuilder(columnFamilyName.getBytes());// 设置列族参数cfdb.setMaxVersions(columnFamilyVersion);// 构建列族ColumnFamilyDescriptor cfd = cfdb.build();TableName tb = TableName.valueOf(tableName);// 表存在则修改属性if(admin.tableExists(tb)){admin.modifyColumnFamily(tb,cfd);}admin.close();}/*** 创建预分region表,指定分割点* @param tableName* @param columnFamilyName* @param regionNum* @throws Exception*/public static void createCustomRegions(String tableName,String columnFamilyName,String...regionNum) throws Exception {// 创建Admin对象Admin admin = HBaseUtil.getHBaseAmin(HBaseUtil.getHBaseConnection());// 表的描述器TableDescriptorBuilder tdb = TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName));// 列族的描述器ColumnFamilyDescriptorBuilder cfdb = ColumnFamilyDescriptorBuilder.newBuilder(columnFamilyName.getBytes());ColumnFamilyDescriptor cfd = cfdb.build();// 将列族添加到表中tdb.setColumnFamily(cfd);TableDescriptor td = tdb.build();byte[][] by = new byte[regionNum.length][1];for (int i = 0; i < regionNum.length; i++) {by[i] = regionNum[i].getBytes();}// 建表,指定预分的region的keyadmin.createTable(td,by);// 释放资源admin.close();}/*** 创建多个列族,并指定,数据版本个数,和数据存储时间* @param tableName* @param columnFamilyVersion* @param columnFamilyDataTimeLive* @param columnFamilyName* @throws Exception*/public static void createMoreColumnFamilyTable(String tableName,int columnFamilyVersion,int columnFamilyDataTimeLive,String... columnFamilyName) throws Exception {// 创建Admin对象Admin admin = HBaseUtil.getHBaseAmin(HBaseUtil.getHBaseConnection());// 创建表的构造器TableDescriptorBuilder tdb = TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName));// 使用集合存储列族对象List<ColumnFamilyDescriptor> list = new ArrayList<>();for (int i = 0; i < columnFamilyName.length; i++) {// 创建列族的构造器ColumnFamilyDescriptorBuilder cfdb = ColumnFamilyDescriptorBuilder.newBuilder(columnFamilyName[i].getBytes());// 设置列族属性// 设置列族数据存储的版本数cfdb.setMaxVersions(columnFamilyVersion);// 设置列族中数据的存储时间cfdb.setTimeToLive((columnFamilyDataTimeLive));list.add(cfdb.build());}// 表的构造器添加列族tdb.setColumnFamilies(list);// 表描述对象TableDescriptor td = tdb.build();// 创建多个列族的表admin.createTable(td);// 释放资源admin.close();}/*** 创建单列族的表,设置列族数据版本个数和数据存储时间* @param tableName* @param columnFamilyName* @param columnFamilyVersions* @param columnFamilyDataliveTime* @throws Exception*/public static void createOneColumnFamilyTable(String tableName,String columnFamilyName,int columnFamilyVersions,int columnFamilyDataliveTime) throws Exception {// 创建Admin对象Admin admin = HBaseUtil.getHBaseAmin(HBaseUtil.getHBaseConnection());// 创建表的构造器TableDescriptorBuilder tdb = TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName.getBytes()));// 创建列族构造器ColumnFamilyDescriptorBuilder cfdb = ColumnFamilyDescriptorBuilder.newBuilder(columnFamilyName.getBytes());// 设置列族属性// 设置数据版本个数和存储时间cfdb.setTimeToLive(columnFamilyDataliveTime);cfdb.setMaxVersions(columnFamilyVersions);// 创建列族描述对象ColumnFamilyDescriptor cfd = cfdb.build();// 向表中加列族tdb.setColumnFamily(cfd);// 创建表的描述对象TableDescriptor td = tdb.build();// 创建表admin.createTable(td);// 释放资源admin.close();}/*** 删除指定列数据* @param tableName* @param rowKey* @param family* @param column* @throws Exception*/public static void deleteData(String tableName,String rowKey,String family,String column) throws Exception {// 获取表Table tb = HBaseUtil.getHBaseTableName(HBaseUtil.getHBaseConnection(), tableName);// 创建delete对象,指定删除行Delete delete = new Delete(rowKey.getBytes());// 指定删除列数据delete.addColumn(family.getBytes(),column.getBytes());// 删除数据tb.delete(delete);// 释放资源tb.close();}/*** 删除指定列族* @param tableName* @param rowKey* @param family* @throws Exception*/public static void deleteFamily(String tableName,String rowKey,String family) throws Exception {// 获取表Table tb = HBaseUtil.getHBaseTableName(HBaseUtil.getHBaseConnection(), tableName);// 创建delete对象,指定删除行Delete delete = new Delete(rowKey.getBytes());// 指定删除列族delete.addFamily(family.getBytes());// 删除数据tb.delete(delete);// 释放资源tb.close();}/*** 删除指定行* @param tableName* @param rowKey* @throws Exception*/public static void deleteRow(String tableName,String rowKey) throws Exception {// 获取表Table tb = HBaseUtil.getHBaseTableName(HBaseUtil.getHBaseConnection(), tableName);// 创建delete对象,指定删除行Delete delete = new Delete(rowKey.getBytes());// 删除数据tb.delete(delete);// 释放资源tb.close();}/*** 扫描指定rk范围数据* @param tableName* @param startRowKey* @param endRowKey* @throws Exception*/public static void scanData(String tableName,String startRowKey,String endRowKey) throws Exception {// 获取表Table tb = HBaseUtil.getHBaseTableName(HBaseUtil.getHBaseConnection(), tableName);// 获取扫描对象Scan scan = new Scan();// 从startRowKey开始扫描,到endRowKey结束,含头不含尾scan.withStartRow(startRowKey.getBytes());scan.withStopRow(endRowKey.getBytes());ResultScanner scanner = tb.getScanner(scan);Iterator<Result> it = scanner.iterator();while(it.hasNext()){Result result = it.next();HBaseUtil.showData(result);}tb.close();}/*** 获取单行或多行数据* @param tableName* @param rowKey* @throws Exception*/public static void getRowDatas(String tableName,String... rowKey) throws Exception {// 获取表Table tb = HBaseUtil.getHBaseTableName(HBaseUtil.getHBaseConnection(), tableName);// 创建集合存储行数据List<Get> list = new ArrayList<>();for (int i = 0; i < rowKey.length; i++) {Get get = new Get(rowKey[i].getBytes());list.add(get);}Result[] results = tb.get(list);// 展示行数据for (Result result:results) {HBaseUtil.showData(result);System.out.println(result);}tb.close();}/*** 指定行,列族,列插入数据* @param tableName* @param rowKey* @param columnFamily* @param column* @param value* @throws Exception*/public static void putData(String tableName,String rowKey,String columnFamily,String column,String value) throws Exception {// 获取表Table tb = HBaseUtil.getHBaseTableName(HBaseUtil.getHBaseConnection(), tableName);// 获取Put对象,并设置行健Put put = new Put(rowKey.getBytes());// 设置添加值put.addColumn(columnFamily.getBytes(),column.getBytes(),value.getBytes());// 添加数据tb.put(put);tb.close();}
}

HBase自定义工具类相关推荐

  1. ThinkPHP3验证码、文件上传、缩略图、分页(自定义工具类、session和cookie)

    验证码 TP框架中自带了验证码类 位置:Think/verify.class.php 在LoginController控制器中创建生存验证码的方法 login.html登陆模板中 在LoginCont ...

  2. 自定义工具类:工具类介绍

    自定义工具类 自定义注解 自定义注解 package com.learn.domain.poi;import java.lang.annotation.ElementType; import java ...

  3. 第三次学JAVA再学不好就吃翔(part27)--自定义工具类

    学习笔记,仅供参考 面向对象 自定义工具类中使用静态方法 有的时候,我们需要创建一个自己的工具类,方便工作和学习中使用. 在工具类中,我们要在里面放一些静态的方法,方便我们用类名调用,这时,为了防止有 ...

  4. 【开发随机】JAVA+POI+自定义注解+反射构建自定义工具类实现快捷简便的Excel模板化导出(附demo代码)

    220907更新 项目UAT期间,用户反映了一个问题,数据量稍大的情况下,会出现"从某一行开始,往下所有行设置的字体和字体大小不生效"的BUG. 经过排查,发现原因是:POI的XS ...

  5. python如何设计工具类_Python基础之自定义工具类

    class ListHelper: @staticmethod def find_all(target, func_condition): """ 查找列表中满足条件的所 ...

  6. springboot自定义工具类构建打包踩坑经历

    前言 1.如何打包一个工具类? 2.如何在工具类中引入第三方jar包? 3.如何在调用工具类时能够正确识别工具类中的静态资源? 4.如何在静态方法中注入变量? 如果你有以上问题,请看下去,相信对你有帮 ...

  7. java validate校验_自定义工具类实现validate参数校验

    前言 相信项目中做一些htttp接口,避免不了要对参数进行校验,大多数情况下,其实我们只是校验是否为NULL就可以了 1.通过注解实现各种状态的字段 1.1.引入依赖 默认的版本是6.0.9.Fina ...

  8. 自定义工具类Static方法调用业务中Service层方法

    文章目录 前言 一.如何实现? 二.Util工具类实现 代码相关注解 总结 前言 今天需要验证OpenId,来看是否为系统用户,直接封装一个工具类,遇到了调用业务层service的方法.记一次学习笔记 ...

  9. 自定义工具类:导入工具类测试

    工具类完成导入导出 (1)导入数据 List<User> list = new ExcelImportUtil(User.class).readExcel(is, 1, 2); (2)导出 ...

最新文章

  1. 增量备份和差异备份的区别|什么是增量差异备份
  2. 二叉查找树(binary search tree)详解
  3. java.io设计模式_Java IO文件过滤器对命令设计模式的使用
  4. [异步图书].Python机器学习:预测分析核心算法.pdf
  5. 免费好用的划词搜题神器插件
  6. 微信公众号后台接口文档
  7. Spring cloud和规则引擎urule整合代码
  8. c语言取地址和间接引用
  9. Java、JSP报刊订阅管理系统的设计与实现
  10. Laravel 入门基础教程
  11. 【BSC】使用Python玩转PancakeSwap(入门篇)
  12. 由 Apache Kylin 组建的 Kyligence 公司获得数百万美元的天使轮投资
  13. 魅族16php7.3系统,魅族16th官方稳定版固件rom系统刷机包:Flyme 7.3.0.0A
  14. POJ - 3713 (Transferring Sylla)
  15. Lora技术- 码片/码元/数据速率以及空中时间计算
  16. 什么是Type-c降噪耳机?type-c接口耳机降噪方案
  17. w10计算机运行特别卡,win10会很卡,详细教您怎么解决
  18. python合并word表格单元格_合并Word 表格中单元格
  19. 水晶头的制作的学习经历
  20. 转载:“技术支持工程师”薪资行情

热门文章

  1. SpringDataMongoDB-3
  2. java编程中的异常分析及面向对象的思考总结[图]
  3. 使用贝叶斯优化进行深度神经网络超参数优化
  4. mysql左右连接的区别解释
  5. 自定义Dubbo反序列化
  6. 无法完成您的itunes store的请求_itunes连不上网络怎么办 itunes连不上网络解决方法【详细介绍】...
  7. 前端面试之浏览器内核
  8. 安全链生态发展官Mingo:打造去中心化安全社群,让每个人贡献安全力量
  9. GIT回退到指定版本的两种方法(reset/revert)
  10. ScheduleThreadPoolExecutor 定时任务线程池原理