Hbase JAVA Client 基础 API 详细介绍

1.CRUD操作

初始的一组基本操作通常称为CRUD,它代表着 create, read, update和delete 操作。

2.Put 方法

Put方法可以作用在单独的行上,也可以操作行列表上。

Single Put

void put(Put put) throws IOException

该函数的输入参数是一个Put对象,Put对象是用如下构造函数创建的:

Put(byte[] row)
Put(byte[] row, RowLock rowLock)
Put(byte[] row, long ts)
Put(byte[] row, long ts, RowLock rowLock)

创建Put实例后,可以向其添加数据。 使用以下方法:

Put add(byte[] family, byte[] qualifier, byte[] value)
Put add(byte[] family, byte[] qualifier, long ts, byte[] value)
Put add(KeyValue kv) throws IOException

每次调用add()都只指定一列,可以指定可选的时间戳,指定一个值。如果未使用add()调用指定的时间戳,则Put实例将使用构造函数中的可选timestamp参数(也称为ts),Region Server 将设置这个参数。

KeyValue类

对于KeyValue实例, 实例中包含数据以及一个单元格的应存的值, 该类需要提供 Row Key,列族,列限定符和时间戳。 该类提供了构造函数, 构造函数如下所示:

KeyValue(byte[] row, int roffset, int rlength,
byte[] family, int foffset, int flength, byte[] qualifier, int qoffset,
int qlength, long timestamp, Type type, byte[] value, int voffset, int vlength)

1542185203473384.png

Client API能够添加单个Put实例,同时,它还具有批处理操作添加多行的高级功能。 参见以下函数:

void put(List<Put> puts) throws IOException
Atomic compare-and-set

以下函数提供类原子操作服务,对于某些操作,如果要求原子性保证,可以调用此函数,如果检查成功,则执行Put操作; 否则,中止操作。 它可用于根据当前可能相关的值来更新数据。

boolean checkAndPut(byte[] row, byte[] family, byte[] qualifier,
byte[] value, Put put) throws IOException

示例 – 将数据插入HBase的应用程序

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.Bytes;
import java.io.IOException;
public class PutExample {
public static void main(String[] args) throws IOException {
Configuration conf = HBaseConfiguration.create();    1.
HTable table = new HTable(conf, "testtable");            2.
Put put = new Put(Bytes.toBytes("row1"));                 3.
put.add(Bytes.toBytes("colfam1"), Bytes.toBytes("qual1"),
Bytes.toBytes("val1"));            4.
put.add(Bytes.toBytes("colfam1"), Bytes.toBytes("qual2"),
Bytes.toBytes("val2"));   5.
table.put(put);               6.
}
}
}

1. 创建所需的配置;

2. 实例化新客户端;

3. 使用特定行创建Put;

4. 将名称为“colfam1:qual1”的列添加到Put;

5. 将另一列(名称为“colfam1:qual2”)添加到Put中;

6. 将带有列的行存储到HBase表中;

3.Get Method

如果 Client API 需要检索保存的内容,可以用Htable 的Get方法。 Get方法可以对单行进行操作,同时,也可检索多行。

Single Get

如下方法用于从HBase表中检索特定值:

Result get(Get get) throws IOException

与 Put()方法的Put类相似,get()函数需要匹配的Get类。 使用以下构造函数创建Get实例,必须提供 row key:

Get(byte[] row)
Get(byte[] row, RowLock rowLock)

Result类

使用get()调用检索数据时,会收到包含所有匹配单元格的Result类的实例。 它提供了给定行返回值,例如列族,列限定符,时间戳等。

List of Gets

与put()调用的另一个相似之处是,可以使用单个请求得到多行。 可以快速有效地检索相关的数据。

Result[] get(List<Get> gets) throws IOException

示例:应用程序从HBase检索数据

Configuration conf = HBaseConfiguration.create();   1.
HTable table = new HTable(conf, "testtable");    2.
Get get = new Get(Bytes.toBytes("row1"));            3.
get.addColumn(Bytes.toBytes("colfam1"), Bytes.toBytes("qual1"));   4.
Result result = table.get(get);                                 5.
byte[] val = result.getValue(Bytes.toBytes("colfam1"),
Bytes.toBytes("qual1"));                                    6.
System.out.println("Value: " + Bytes.toString(val));  7.

1. 创建配置;

2. 实例化新的表引用;

3. 使用特定行创建Get;

4. 在Get中添加一列;

5. 从HBase中检索包含所选列的行;

6. 获取给定列的特定值;

7. 打印出值。

4. Delete Method

Delete方法用于从Hbase表中删除数据。

Single Delete

删除单行的Delete 方法:

void delete(Delete delete) throws IOException

和get()和put()方法一样,必须创建一个Delete实例,然后添加有关要删除的数据的详细信息,构造函数是:

Delete(byte[] row)
Delete(byte[] row, long timestamp, RowLock rowLock)

List of Deletes

基于列表的delete()调用与基于列表的put()非常相似。 需要创建一个Delete实例列表,调用以下方法:

void delete(List<Delete> deletes) throws IOException

Atomic compare-and-delete

在执行实际删除操作之前,需要指定要检查的row key,列族,限定符和值。 如果测试失败,则不会删除任何内容,并且调用返回false。 如果检查成功,则应用删除并返回true。

boolean checkAndDelete(byte[] row, byte[] family, byte[] qualifier,
byte[] value, Delete delete) throws IOException

示例:应用程序从HBase删除数据

Delete delete = new Delete(Bytes.toBytes("row1"));  1.
delete.setTimestamp(1);                      2.
delete.deleteColumn(Bytes.toBytes("colfam1"), Bytes.toBytes("qual1"), 1);  3.
delete.deleteColumns(Bytes.toBytes("colfam2"), Bytes.toBytes("qual1"));    4.
delete.deleteColumns(Bytes.toBytes("colfam2"), Bytes.toBytes("qual3"), 15);   5.
delete.deleteFamily(Bytes.toBytes("colfam3"));    6.
delete.deleteFamily(Bytes.toBytes("colfam3"), 3);   7.
table.delete(delete);  8.
table.close();

1.使用特定行创建删除对象;

2.设置行删除的时间戳;

3.删除一列中的特定版本;

4.删除一列中的所有版本;

5.删除一列中的给定版本和所有旧版本;

6.删除整个列族,所有列和版本;

7.删除整个列族中的给定版本和所有旧版本,即从其中的所有列中删除;

8.从HBase表中删除数据;

5. Row Locks

操作如put(),delete(),checkAndPut()等是以串行方式执行的,并且同时为每一行保证行级的原子性。 Region Server提供行锁功能,确保只有持有匹配锁的客户端才能修改行。 实际上,大多数客户端应用程序不提供显式锁,而是依赖于每个操作的内在机制。 例如,当使用以下构造函数创建的Put实例发送put()调用时:

Put(byte[] row)

该函数没有显式地提供RowLock实例参数,但RegionServer将代表客户端创建锁定。

Hbase JAVA Client 基础 API 详细介绍

发表评论

邮箱地址不会被公开。 必填项已用*标注

− 1 = 六

滚动到顶部