热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Hbase操作工具类

依赖jarorg.apache.hbasehbase-client

 

依赖jar

org.apache.hbasehbase-client2.0.5

 

 

HbaseUtils.java

package javax.utils;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;/*** Hbase 操作工具类* * @author Logan* @version 1.0.0* @createDate 2019-05-03**/
public class HbaseUtils {// ===============Common=====================================/*** 根据表名获取Table对象* * @param name 表名,必要时可指定命名空间,比如:“default:user”* @return Hbase Table 对象* @throws IOException 有异常抛出,由调用者捕获处理*/public static Table getTable(String name) throws IOException {TableName tableName = TableName.valueOf(name);Connection connection = ConnectionFactory.createConnection();return connection.getTable(tableName);}// =============== Put =====================================/*** 根据rowKey生成一个Put对象* * @param rowKey rowKey* @return Put对象*/public static Put createPut(String rowKey) {return new Put(Bytes.toBytes(rowKey));}/*** 在Put对象上增加Cell* * @param put Put对象* @param cell cell对象* @throws IOException 有异常抛出,由调用者捕获处理*/public static void addCellOnPut(Put put, Cell cell) throws IOException {put.add(cell);}/*** 在Put对象上增加值* * @param put Put对象* @param family 列簇* @param qualifier 列* @param value 字符串类型的值*/public static void addValueOnPut(Put put, String family, String qualifier, String value) {addValueOnPut(put, family, qualifier, Bytes.toBytes(value));}/*** 在Put对象上增加值* * @param put Put对象* @param family 列簇* @param qualifier 列* @param value 字节数组类型的值,可以是任意对象序列化而成*/public static void addValueOnPut(Put put, String family, String qualifier, byte[] value) {put.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier), value);}/*** 在Put对象上增加值* * @param put Put对象* @param family 列簇* @param qualifier 列* @param ts Timestamp时间戳* @param value 字符串类型的值*/public static void addValueOnPut(Put put, String family, String qualifier, long ts, String value) {addValueOnPut(put, family, qualifier, ts, Bytes.toBytes(value));}/*** 在Put对象上增加值* * @param put Put对象* @param family 列簇* @param qualifier 列* @param ts Timestamp时间戳* @param value 字节数组类型的值,可以是任意对象序列化而成*/public static void addValueOnPut(Put put, String family, String qualifier, long ts, byte[] value) {put.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier), ts, value);}/*** 按表名插入一个Put对象包含的数据* * @param tableName 表名,必要时可指定命名空间,比如:“default:user”* @param put 要插入的数据对象* @throws IOException 有异常抛出,由调用者捕获处理*/public static void put(String tableName, Put put) throws IOException {try (Table table = getTable(tableName);) {table.put(put);}}/*** 按表名批量插入Put对象包含的数据* * @param tableName 表名,必要时可指定命名空间,比如:“default:user”* @param puts 要插入的数据对象集合* @throws IOException 有异常抛出,由调用者捕获处理*/public static void put(String tableName, List puts) throws IOException {try (Table table = getTable(tableName);) {table.put(puts);}}// =============== Get =====================================/*** 根据rowKey生成一个查询的Get对象* * @param rowKey rowKey* @return Get 对象*/public static Get createGet(String rowKey) {return new Get(Bytes.toBytes(rowKey));}/*** 对查询的Get对象增加指定列簇* * @param get* @param family*/public static void addFamilyOnGet(Get get, String family) {get.addFamily(Bytes.toBytes(family));}/*** 对查询的Get对象增加指定列簇和列* * @param get* @param family* @param qualifier*/public static void addColumnOnGet(Get get, String family, String qualifier) {get.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier));}/*** 根据表名和rowKey查询结果(包含全部列簇和列)* * @param tableName 表名,必要时可指定命名空间,比如:“default:user”* @param rowKey 查询rowKey* @return 查询结果Result* @throws IOException 有异常抛出,由调用者捕获处理*/public static Result get(String tableName, String rowKey) throws IOException {Get get = createGet(rowKey);return get(tableName, get);}/*** 根据表名和rowKey数组批量查询结果(包含全部列簇和列)* * @param tableName 表名,必要时可指定命名空间,比如:“default:user”* @param rowKeys 查询rowKey数组* @return 查询结果Result数组* @throws IOException 有异常抛出,由调用者捕获处理*/public static Result[] get(String tableName, String[] rowKeys) throws IOException {List gets = new ArrayList();for (String rowKey : rowKeys) {gets.add(createGet(rowKey));}return get(tableName, gets);}/*** 根据表名和Get对象查询结果* * @param tableName 表名,必要时可指定命名空间,比如:“default:user”* @param get Hbase查询对象* @return 查询结果Result* @throws IOException 有异常抛出,由调用者捕获处理*/public static Result get(String tableName, Get get) throws IOException {try (Table table = getTable(tableName);) {return table.get(get);}}/*** 根据表名和Get对象数组查询结果* * @param tableName 表名,必要时可指定命名空间,比如:“default:user”* @param gets 多个Hbase查询对象组成的数组* @return 查询结果Result数组* @throws IOException 有异常抛出,由调用者捕获处理*/public static Result[] get(String tableName, List gets) throws IOException {try (Table table = getTable(tableName);) {return table.get(gets);}}// =============== Scan =====================================/*** 根据startRow和stopRow创建扫描对象* * @param startRow 扫描开始行,结果包含该行* @param stopRow 扫描结束行,结果不包含该行* @return Scan对象*/public static Scan createScan(String startRow, String stopRow) {Scan scan = new Scan();scan.withStartRow(Bytes.toBytes(startRow));scan.withStopRow(Bytes.toBytes(stopRow));return scan;}/*** 对扫描对象设置列簇* * @param scan 扫描对象* @param family 列簇*/public static void addFamilyOnScan(Scan scan, String family) {scan.addFamily(Bytes.toBytes(family));}/*** 对扫描对象设置列* * @param scan 扫描对象* @param family 列簇* @param qualifier 列簇下对应的列*/public static void addColumnOnScan(Scan scan, String family, String qualifier) {scan.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier));}/*** 根据表名和扫描对象扫描数据* * @param tableName 表名,必要时可指定命名空间,比如:“default:user”* @param scan 扫描对象* @return 扫描结果集对象ResultScanner* @throws IOException 有异常抛出,由调用者捕获处理*/public static ResultScanner scan(String tableName, Scan scan) throws IOException {try (Table table = getTable(tableName);) {return table.getScanner(scan);}}/*** 根据表名、开始行和结束行扫描数据(结果包含开始行,不包含结束行,半开半闭区间[startRow, stopRow))* * @param tableName 表名,必要时可指定命名空间,比如:“default:user”* @param startRow 扫描开始行* @param stopRow 扫描结束行* @return 扫描结果集对象ResultScanner* @throws IOException 有异常抛出,由调用者捕获处理*/public static ResultScanner scan(String tableName, String startRow, String stopRow) throws IOException {return scan(tableName, createScan(startRow, stopRow));}// =============== Delete =====================================/*** 根据rowKey生成一个查询的Delete对象* * @param rowKey rowKey* @return Delete对象*/public static Delete createDelete(String rowKey) {return new Delete(Bytes.toBytes(rowKey));}/*** 在Delete对象上增加Cell* * @param delete Delete对象* @param cell cell对象* @throws IOException 有异常抛出,由调用者捕获处理*/public static void addCellOnDelete(Delete delete, Cell cell) throws IOException {delete.add(cell);}/*** 对删除对象增加指定列簇* * @param delete Delete对象* @param family 列簇*/public static void addFamilyOnDelete(Delete delete, String family) {delete.addFamily(Bytes.toBytes(family));}/*** 对删除对象增加指定列簇和列* * @param delete Delete对象* @param family 列簇* @param qualifier 列*/public static void addColumnOnDelete(Delete delete, String family, String qualifier) {delete.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier));}/*** 按表名删除一个Delete对象指定的数据* * @param tableName 表名,必要时可指定命名空间,比如:“default:user”* @param delete Delete对象* @throws IOException 有异常抛出,由调用者捕获处理*/public static void delete(String tableName, Delete delete) throws IOException {try (Table table = getTable(tableName);) {table.delete(delete);}}/*** 按表名批量删除Delete对象集合包含的指定数据* * @param tableName 表名,必要时可指定命名空间,比如:“default:user”* @param deletes Delete对象集合* @throws IOException 有异常抛出,由调用者捕获处理*/public static void delete(String tableName, List deletes) throws IOException {try (Table table = getTable(tableName);) {table.delete(deletes);}}}

 

 

 

以下是测试类

HbaseClientDemo.java

package com.java.demo;import java.util.ArrayList;
import java.util.List;import javax.utils.HbaseUtils;import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.Test;/*** Hbase 客户端测试* * @author Logan* @version 1.0.0* @createDate 2019-05-03**/
public class HbaseClientDemo {/*** 向user表中插入数据*/@Testpublic void put() {String tableName = "default:user";try {List puts = new ArrayList();Put put = HbaseUtils.createPut("key1005");HbaseUtils.addValueOnPut(put, "info", "name", "孙悟空");HbaseUtils.addValueOnPut(put, "info", "age", "500");HbaseUtils.addValueOnPut(put, "info", "address", "花果山");// HbaseUtils.put(tableName, put);
puts.add(put);put = HbaseUtils.createPut("key1006");HbaseUtils.addValueOnPut(put, "info", "name", "沙悟净");HbaseUtils.addValueOnPut(put, "info", "age", "1000");HbaseUtils.addValueOnPut(put, "info", "address", "流沙河");puts.add(put);HbaseUtils.put(tableName, puts);} catch (Exception e) {e.printStackTrace();}}/*** 按rowKey批量查询user表中全部列簇全部列的值*/@Testpublic void getAllFamily() {try {String tableName = "default:user";String[] rowKeys = { "key1001", "key1002", "key1003", "key1005", "key1006" };// 按表名和rowKey查询所有列Result[] results = HbaseUtils.get(tableName, rowKeys);for (Result result : results) {// 打印查询结果
printResult(result);}} catch (Exception e) {e.printStackTrace();}}/*** 按rowKey查询user表中指定列簇指定列的值*/@Testpublic void get() {try {String tableName = "default:user";String rowKey = "key1002";Get get = HbaseUtils.createGet(rowKey);HbaseUtils.addColumnOnGet(get, "info", "name");HbaseUtils.addColumnOnGet(get, "info", "age");// 不存在的列,查询结果不显示HbaseUtils.addColumnOnGet(get, "info", "address");// 如果在增加列后增加已有的列簇,会返回该列簇的全部列数据,覆盖前边的增加列// HbaseUtils.addFamilyOnGet(get, "info");
Result result = HbaseUtils.get(tableName, get);printResult(result);} catch (Exception e) {e.printStackTrace();}}@Testpublic void scan() {try {String tableName = "default:user";String startRow = "key1001";String stopRow = "key1006";ResultScanner resultScanner = HbaseUtils.scan(tableName, startRow, stopRow);for (Result result : resultScanner) {printResult(result);}} catch (Exception e) {e.printStackTrace();}}/*** 打印查询结果* * @param result 查询结果对象*/private void printResult(Result result) {Cell[] cells = result.rawCells();// 从Result中读取 rowKey
System.out.println(Bytes.toString(result.getRow()));String print = "%s\t %s:%s \t %s";for (Cell cell : cells) {// 从Cell中取rowKeyString row = Bytes.toString(CellUtil.cloneRow(cell));String family = Bytes.toString(CellUtil.cloneFamily(cell));String qualifier = Bytes.toString(CellUtil.cloneQualifier(cell));String value = Bytes.toString(CellUtil.cloneValue(cell));System.out.println(String.format(print, row, family, qualifier, value));}}/*** 删除指定列*/@Testpublic void deleteColumn() {try {String tableName = "default:user";List deletes = new ArrayList();Delete delete = HbaseUtils.createDelete("key1005");HbaseUtils.addColumnOnDelete(delete, "info", "age");HbaseUtils.addColumnOnDelete(delete, "info", "address");// HbaseUtils.delete(tableName, delete);
deletes.add(delete);delete = HbaseUtils.createDelete("key1006");HbaseUtils.addColumnOnDelete(delete, "info", "address");deletes.add(delete);HbaseUtils.delete(tableName, deletes);} catch (Exception e) {e.printStackTrace();}}/*** 删除指定列簇*/@Testpublic void deleteFamily() {try {String tableName = "default:user";List deletes = new ArrayList();Delete delete = HbaseUtils.createDelete("key1005");HbaseUtils.addFamilyOnDelete(delete, "info");// HbaseUtils.delete(tableName, delete);
deletes.add(delete);delete = HbaseUtils.createDelete("key1006");HbaseUtils.addFamilyOnDelete(delete, "info");deletes.add(delete);HbaseUtils.delete(tableName, deletes);} catch (Exception e) {e.printStackTrace();}}}

 

  

 

Hbase 操作工具类

.


转载于:https://www.cnblogs.com/jonban/p/hbase-client.html


推荐阅读
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Java自带的观察者模式及实现方法详解
    本文介绍了Java自带的观察者模式,包括Observer和Observable对象的定义和使用方法。通过添加观察者和设置内部标志位,当被观察者中的事件发生变化时,通知观察者对象并执行相应的操作。实现观察者模式非常简单,只需继承Observable类和实现Observer接口即可。详情请参考Java官方api文档。 ... [详细]
  • Spring学习(4):Spring管理对象之间的关联关系
    本文是关于Spring学习的第四篇文章,讲述了Spring框架中管理对象之间的关联关系。文章介绍了MessageService类和MessagePrinter类的实现,并解释了它们之间的关联关系。通过学习本文,读者可以了解Spring框架中对象之间的关联关系的概念和实现方式。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 面向对象之3:封装的总结及实现方法
    本文总结了面向对象中封装的概念和好处,以及在Java中如何实现封装。封装是将过程和数据用一个外壳隐藏起来,只能通过提供的接口进行访问。适当的封装可以提高程序的理解性和维护性,增强程序的安全性。在Java中,封装可以通过将属性私有化并使用权限修饰符来实现,同时可以通过方法来访问属性并加入限制条件。 ... [详细]
  • (三)多表代码生成的实现方法
    本文介绍了一种实现多表代码生成的方法,使用了java代码和org.jeecg框架中的相关类和接口。通过设置主表配置,可以生成父子表的数据模型。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
author-avatar
无声无无为爱
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有