Hbase Java API

Hbase Java API

1、常用对象

org.apache.hadoop.hbase.client.Connection

Hbase Client 主要的链接对象,用来对Hbase Server进行操作。

org.apache.hadoop.conf.Configuration

Hbase 主要的配置对象,用来配置Client与Server直接的链接配置。

org.apache.hadoop.hbase.client.Admin

HBase Admin负责表的META信息处理。

org.apache.hadoop.hbase.client.Table

Hbase 的表对象

org.apache.hadoop.hbase.client.Scan

Hbase 表扫描器。

org.apache.hadoop.hbase.client.Result

Hbase 结果集

2、链接

// 创建Hbase conf对象
org.apache.hadoop.conf.Configuration conf = org.apache.hadoop.hbase.HBaseConfiguration.create() ;
// 设置配置参数
conf.set("hbase.zookeeper.quorum", "pazi1,pazi2,pazi3");    // zookeeper节点信息
conf.set("hbase.zookeeper.property.clientPort", "2181");    // zookeeper端口
conf.set("dfs.socket.timeout", "180000");                   // 超时时间
// 创建链接对象
org.apache.hadoop.hbase.client.Connection conn = org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(conf);

// 上面是创建一个链接对象,如果想创建线程池,那么就按下面来
// 创建线程池对象
java.util.concurrent.ExecutorService pool = Executors.newFixedThreadPool(10);
// 创建Hbase 链接对象
Connection connection = ConnectionFactory.createConnection(conf,pool);

// 获取Hbase管理对象,后续操作需要用到
Admin admin = conn.getAdmin();

3、命名操作

3.1 增

// 创建命名空间构造器
org.apache.hadoop.hbase.NamespaceDescriptor namespaceDescriptor = NamespaceDescriptor.create("Pazii").build();
// 创建
admin.createNamespace(namespaceDescriptor);

3.2 删

admin.deleteNamespace("Pazii");

3.3 改

// 命名空间构造器
NamespaceDescriptor namespaceDescriptor = NamespaceDescriptor.create("Pazii").build();
// 添加属性
namespaceDescriptor.setConfiguration("Pazi", "Pazi");
// 修改
admin.modifyNamespace(namespaceDescriptor);

3.4 查

// 获取全部
NamespaceDescriptor[] listNamespaceDescriptors = admin.listNamespaceDescriptors();
for (NamespaceDescriptor namespaceDescriptor2 : listNamespaceDescriptors) {
	// 名称
	String name = namespaceDescriptor2.getName();
	// 所有属性
	Map<String, String> configuration = namespaceDescriptor2.getConfiguration();
}

4、表操作

4.1 增

// 创建表构造器
TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(tableName);
// 列族构造器,设置列族属性
ColumnFamilyDescriptor columnFamilyDescriptor = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("c"))
	.setCompressionType(Algorithm.GZ)	// 压缩方式
	.setTimeToLive(10)					// 数据生存时间,S
	.setMaxVersions(2)
	.setMinVersions(1) 					// 最大最小版本数
	.setBloomFilterType(BloomType.ROW)	// 布隆过滤器默认是开启的,并且默认为行模式
	.setBlockCacheEnabled(false)		// 开启块缓存
	.build();	
// 给表添加列族
tableDescriptorBuilder.setColumnFamily(columnFamilyDescriptor);
// 也可以直接创建列族,属性全部走默认.
tableDescriptorBuilder.setColumnFamily(ColumnFamilyDescriptorBuilder.of("a"));
// 创建表
admin.createTable(tableDescriptorBuilder.build());

4.2 删

// 删除表
// 1 禁用要删除的表
admin.disableTable(TableName.valueOf("pazi"));
// 2 删除禁用的表
admin.deleteTable(TableName.valueOf("pazi"));
// 3 如果不删除,则需要重新将表置为可用
admin.enableTable(TableName.valueOf("pazi"));

4.3 改

// 修改表
// 大体过程跟上面创建表一样,将要修改表的属性构造器创建完毕,然后修改即可.
admin.modifyTable(tableDescriptorBuilder.build());

4.4 查

//	查看
// 获取所有表名以及表信息
TableName[] listTableNames = admin.listTableNames();
for (TableName tableName2 : listTableNames) {
	String nameAsString = tableName2.getNameAsString();
	String namespaceAsString = tableName2.getNamespaceAsString();
}

5、数据操作

5.1 增

// 获取表对象
Table table = connection.getTable(tableName);
// 创建Put对象
Put put = new Put(Bytes.toBytes("pazi"));
// 设置数据
put.addColumn(/**family*/Bytes.toBytes("pazi"), /**family*/Bytes.toBytes("pazi"), /**family*/Bytes.toBytes("pazi"));
// 添加数据
table.put(put);

5.2 删

// 创建Delete对象
Delete delete = new Delete(/** rowkey */Bytes.toBytes("pazi"));
// 删除
table.delete(delete);

5.3 改

Hbase 修改数据的话不是很好.

5.4 查

// 1 准确查询
Get get = new Get(/** rowkey */Bytes.toBytes("pazi"));
Result result = table.get(get);
Cell[] rawCells = result.rawCells();
for (Cell cell : rawCells) {
System.out.println("rowkey::" + new String(CellUtil.cloneRow(cell)));
System.out.println("timeStamp::" + cell.getTimestamp());
System.out.println("columnFamily::" + new String(CellUtil.cloneFamily(cell)));
System.out.println("colum::" + new String(CellUtil.cloneQualifier(cell)));
System.out.println("value::" + new String(CellUtil.cloneValue(cell)));
}
// 2 扫描表
Scan scan = new Scan();
// 设置扫描范围
scan.withStartRow(/** 起始rowkey */Bytes.toBytes("pazi"), /** 是否包含此条记录 */true);
scan.withStopRow(/** 结束rowkey */Bytes.toBytes("pazi"), /** 是否包含此条记录 */true);
// ---------有关行键的过滤器---------
// 行键前缀过滤器
Filter f = new PrefixFilter(Bytes.toBytes("15"));
// 只扫描行键的过滤器,不获取值
// Filter f = new KeyOnlyFilter();
// 随机行过滤器,按比例获取随机行数
// Filter f = new RandomRowFilter(0.5f);
// 行范围过滤器
// List list = new ArrayList<>();
// list.add(new MultiRowRangeFilter.RowRange("1001",true,"1004",true));
// Filter f = new MultiRowRangeFilter(list);
// 行键过滤器,可以通过提供不同比较器实现不同功能,如匹配行键前缀
// Filter f = new RowFilter(CompareOperator.EQUAL, new BinaryPrefixComparator(Bytes.toBytes("10")));
// 列族相关过滤器,匹配正则表达式
// Filter f = new FamilyFilter(CompareOperator.EQUAL, new RegexStringComparator(".*base.*"));
// 列相关过滤器,获得前n列过滤器
// Filter f = new ColumnCountGetFilter(1);
// 列分页过滤器 基于ColumnPaginationFilter,参数1 获得n列 参数2 从第n列开始获取
// Filter f = new ColumnPaginationFilter(3,1);
// 列名前缀过滤器
// Filter f = new ColumnPrefixFilter(Bytes.toBytes("na"));
// 列名范围过滤器
// Filter f = new ColumnRangeFilter(Bytes.toBytes("aaa"),true,Bytes.toBytes("ccc"),true);
// 匹配某列族某列某值的过滤器
// Filter f = new ColumnValueFilter(Bytes.toBytes("info"),Bytes.toBytes("age"),CompareOperator.EQUAL,Bytes.toBytes("20"));
// 根据值的比较过滤行
// Filter f = new ValueFilter(CompareOperator.EQUAL, new RegexStringComparator(".*t.*"));
// 设置扫描的过滤器
scan.setFilter(f);
ResultScanner scanner = table.getScanner(scan);
Result result2 ;
if((result2=scanner.next()) != null) {
List<Cell> listCells = result2.listCells();
// ...
}

你可能感兴趣的:(Hbase)