美文网首页
HBase权威指南(二)客户端API基础

HBase权威指南(二)客户端API基础

作者: kaiker | 来源:发表于2022-03-05 15:39 被阅读0次

1、概述

HBase的主要客户端接口是由org.apache.hadoop.hbase.client包中的HTable类提供
所有修改数据的操作都保证了行级别的原子性,要么读到最新的修改,要么等待系统允许写入该行修改
尽量使用批量处理更新来减少单独操作同一行数据的次数
创建HTable实例时有代价的,每个实例都需要扫描.META.表以检查该表是否存在可用,推荐每个线程只创建一次HTable实例,如果需要使用多个HTable实例,应考虑HTablePool类

2、CURD

put

void put(Put put) throws IOException

Put(byte[] row)
Put(byte[] row, RowLock rowLock)
Put(byte[] row, long ts)
Put(byte[] row, long ts, RowLock rowLock)
Put add(byte[] family, byte[] qualifier, byte[] value)
Put add(byte[] family, byte[] qualifier, long ts, byte[] value)
Put add(KeyValue kv) throws IOException
public static void main(String[] args) throws IOException {
  Configuration conf = HBaseConfiguration.create();
  HTable table = new HTable(conf, "testtable");
  Put put = new Put(Bytes.toBytes("row1"));
  put.add(Bytes.toBytes("colfam1"), Bytes.toBytes("qual2"), Bytes.toBytes("val2"));
  table.put(put)
}

KeyValue类

特定单元格的数据以及坐标,坐标包括行键、列族名、列限定符以及时间戳
KeyValue(byte[] row, int roffset, int rlength, byte[] family, int foffoset, int flength, byte[] qualifier, int qoffset, int qlength, long timestamp, Type type, byte[] value, int voffset, int vlength)
每一个字节数组都有一个offset参数和一个length参数,允许用户提交一个已经存在的字节数组进行字节级别操作。
行目前来说指的是行键,即Put构造器里的row参数。

客户端的写缓冲区

每个put操作实际上都是一个RPC操作,它将客户端数据传送到服务器然后返回。
HBase的API配备了一个客户端的写缓冲区,缓冲区负责收集put操作,然后调用RPC操作一次性将put送往服务器。

void setAutoFlush(boolean autoFlush)
boolean isAutoFlush()
图片.png

Put列表

void put(List<Put> puts) throws IOException
批量提交可能会有部分修改失败

原子性操作compare-and-set

如果检查成功通过,就执行put操作,否则就彻底放弃修改操作。
`boolean checkAndPut(byte[] row, byte[] family, byte[] qualifier, )

get

Result get(Get get) throws IOException

Get(byte[] row)
Get(byte[] row, RowLock rowLock)
Get addColumn(byte[] family, byte[] qualifier)
Get addFamily(byte[] family)

Result类

当用户使用get()方法获取数据,HBase返回的结果包含所有匹配的单元格数据,这些数据被封装在一个Result实例中返回给用户。

byte[] getValue(byte[] family, byte[] qualifier)
byte[] value()
byte[] getRow()
int size()
boolean isEmpty()
KeyValue[] raw()
List<KeyValue> list()

delete

void delete(Delete delete) throws IOException

Delte(byte[] row)
Delete(byte[] row, long timestamp, RowLock rowLock)
Delete deleteFamily(byte[] family)
Delete deleteFamily(byte[] family, long timestamp)
Delete deleteColumns(byte[] family, byte[] qualifier)
Delete deleteColumn(byte[] family, byte[] qualifier) // 只删除最新版本

3、批量处理操作

Row是Put Get Delete的父类
void batch(List<Row> actions, Object[] results) throws IOException, InterruptedException
Object batch(List<Row> actions) throws IOException, InterruptedException

4、行锁

region服务器提供了行锁特性,这个特性保证了只有一个客户端能获取一行数据相应的锁,同时对该行进行修改。
如果不显示指定锁,服务器会隐式加锁

5、扫描

scan,类似数据库系统中的cursor,利用了HBase提供的底层顺序存储的数据结构。
调用HTable的getScanner就可以返回扫描器

ResultScanner getScanner(Scan scan) throws IOException
ResultScanner getScanner(byte[] family) throws IOException

Scan类构造器可以有startRow,区间一般为[startRow, stopRow)

Scan(byte[] startRow, Filter filter)
Scan(byte[] startRow)

ResultScanner

以行为单位进行返回

Result next() throws IOException
Result[] next(int nbRows) throws IOException
void close()

缓存与批量处理

每一个next()调用都会为每行数据生成一个单独的RPC请求
可以设置扫描器缓存

void setScannerCaching(itn scannerCaching)
int getScannerCaching()

缓存是面向行一级操作,批量是面向列一级操作

void setBatch(int batch)
int getBatch

RPC请求的次数=(行数*每行列数)/Min(每行的列数,批量大小)/扫描器缓存

相关文章

  • HBase权威指南(二)客户端API基础

    1、概述 HBase的主要客户端接口是由org.apache.hadoop.hbase.client包中的HTab...

  • HBase权威指南(三)客户端API高级

    1、过滤器 get() scan()不能对行键、列名或列值进行过滤,可通过过滤器实现所有过滤器都在服务端生效,叫谓...

  • 技术书单

    Java性能权威指南 hadoop权威指南 hbase权威指南 大型网站系统与Java中间件实践 Effectiv...

  • 2021-10-23

    推荐书籍:《HBase原理与实践》《HBase实战》《HBase权威指南》《HBase企业应用开发实战》《HBas...

  • HBase权威指南(四)客户端API管理功能

    1、模式定义 表 HBase中数据最终会存储在一张表或多张表中。 虽然理论上HBase的表是由行和列组成的,但从物...

  • HBaseAPI应用与优化

    HBase API 客户端操作 HBaseAPI 客户端操作 代码: Hbase协处理器 协处理器概述 官方地址[...

  • hbase权威指南

    前言 hbase是一个列式存储数据库(以列为单位聚合数据,然后将列值顺序地存入磁盘;它的有点是减少IO以及利于压缩...

  • HBase权威指南

    推荐序 Google公司提出的MapReduce编程框架、GFS文件系统和BigTable存储系统成为了大数据处理...

  • HBase优化四——HTable优化

    HTable是HBase客户端与HBase服务端通讯的Java API对象,客户端可以通过HTable对象与服务端...

  • HBase客户端API-Batch操作

    上一篇博客说了使用 HBase 的客户端 API 来操作操作 HBase 表中记录,今天我们看看怎样通过 API ...

网友评论

      本文标题:HBase权威指南(二)客户端API基础

      本文链接:https://www.haomeiwen.com/subject/dytbrrtx.html