操纵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编程,实际上是将表和对表的增删改查等操作封装成了类对象。
相关类如下:
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();
}
}
}
参考文章: (HBase编程实例)