通过JAVA的api来进行hbase编程

操纵habase的时候,通过Hbase shell可以进行一些操作,但是和实际的编程实例联系起来不方便,因此本文介绍有关Hbase编程的相关java API,并直接在idea中编写java代码,连接hbase并执行相关操作。实际上:hbase shell中输入的相关命令,最终都是通过jruby将其转换成了java代码进行执行,所以,本质还是java进行执行的。jruby转换相关命令的文件在这个目录当中:

/usr/local/hbase/lib/ruby/shell/commands

通过java的api进行hbase编程,实际上是将表和对表的增删改查等操作封装成了类对象

                                 通过JAVA的api来进行hbase编程_第1张图片

相关类如下:

1 配置对象:Configuration以及HBaseConfiguration

作用:用来加载src/resources目录下的配置文件

2 表名对象:TableName

作用:用来指定表名

3 连接对象:Connection以及连接工厂对象:ConnectionFactory

作用:用来创建连接

4 通过连接Connection对象,可以得到HBaseAdmin和Htable对象,分别用来执行标的DDL操作和DML操作,即:表的增删改操作以及表中数据的增删改查操作

DML中的增删改也封装成了相应的类:Put、Get、Delete

返回的结果对象:Result(一行数据)、ResultScanner(多行数据)、Cell(一行中的某列数据,即一个单元格的数据)(CellUtil用来获取cell的列族、值等信息)

条件查询的时候用到的类:Filter和SingleColumnValueFilter、Scan

多条件查询:FilterList类

分页查询:PageFilter类

 

5 表描述其以及列族描述器:HTableDescriptor和 HColumnDescriptor

作用:表描述器:维护关于列的信息。

列族描述器:维护关于列的信息。

 

示例代码:代码逻辑:表的增删改查,以表的get方法为示例:建表 mytable->查询mytable.get( Get get)->安照get方法的参数类型,写Get类对象 get->获得的结果用Result保存,具体到Cell就是一个单元格的信息。

public class DMLTest {
    //连接对象和表名
    private static final Configuration CONF = HBaseConfiguration.create();
    //表名
    private static final TableName TABLE_NAME = TableName.valueOf("tb2");
    //列族:存放 人员信息,年龄信息,职业信息
	@Test
    public void getOneRowDataTest()throws Exception{
		// 获取数据库连接
		Connection conn = ConnectionFactory.createConnection(conf);
		// 获取你要操作的表
		HTable mytable = (HTable)conn.getTable(tableName);
		// 创建数据的获取对象 cf1 cf2 cf3 cf1
		Get get = new Get(Bytes.toBytes("hb_1"));
		// 指定列族查询
		// get.addFamily(Bytes.toBytes("cf1"));
		// 根据列名获取数据
		// get.addColumn(Bytes.toBytes("cf1"), Bytes.toBytes("name"));
		// 根据特定的时间戳 进行数据的查询
		// get.setTimeStamp(1568949499113L);
		
		
		// 获取这行数据
		Result result = mytable.get(get);
		// 观察 result 看怎么解析
		Cell[] cells = result.rawCells();
		System.out.println("ROW\t\tCOLUMN+CELL");
		for (Cell cell : cells) {
//			System.out.print("列族 : " + new String(CellUtil.cloneFamily(cell)) + "\t");
//			System.out.print("列的限定符 : " + new String(CellUtil.cloneQualifier(cell)) + "\t");
//			System.out.print("列的值 : " + new String(CellUtil.cloneValue(cell)) + "\t");
//			System.out.println("这个值的时间戳 : " + cell.getTimestamp());
			
			System.out.println(""+new String(result.getRow())+"\t\tcolumn="+new String(CellUtil.cloneFamily(cell))+":"+new String(CellUtil.cloneQualifier(cell))+", timestamp="+cell.getTimestamp()+", value="+new String(CellUtil.cloneValue(cell))+"");
			
			
		}
		
		
		// 关闭数据库连接
		if(null != mytable){
			mytable.close();
		}
		if(null != conn){
			conn.close();
		}
	}
}
	

 

参考文章:https://my.oschina.net/u/181485/blog/305925  (HBase编程实例)

 

 

你可能感兴趣的:(hbase)