Hbase客户端操作

Hbase客户端操作

Hbase客户端接口操作由org.apache.hadoop.hbase.client.Hbase提供,完成对Hbase存储检索,删除,修改等操作。
hbase对数据修改操作保持行级别的原子性。
每次客户端操作,都会创建HTable类实例,创建实例时需先扫描.META表,检查是否存在可用。
创建比较耗时,因此尽量创建一次,并服用。

常用操作

创建put实例

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

要给某行的某些列添加数据,则需要先创建Put实例才可进行操作。
row为行键,要求byte[]数组类型。
hbase提供java类型转byte[]数组的方法:

static byte[] toBytes(ByteBuffer bb)
static byte[] toBytes(String s)
static byte[] toBytes(boolean b)
static byte[] toBytes(long l)
static byte[] toBytes(float f)
static byte[] toBytes(int i)
给行添加数据:
Put add(byte[] family , byte[] qualifier , byte[] value)
Put add(byte[] family , byte[] qualifier , long ts, byte[] value)
Put add(byte[] family , byte[] qualifier , byte[] value)
判断是否存在行的某个单元格:
boolean has(byte[] family, byte[] qualifier)
boolean has(byte[] family, byte[] qualifier, long ts)
boolean has(byte[] family, byte[] qualifier, byte[] value)
boolean has(byte[] family, byte[] qualifier, long ts , byte[] value)

常用方法:

在这里插入图片描述

插入数据示例:
public class HbaseDemo {
    public static void main(String[] args) {
        Configuration conf = HBaseConfiguration.create();
        HTable table = new HTable(conf,"testtable");
        Put put = new Put(Bytes.toBytes("row1"));
        put.add(Bytes.toBytes("colfam1"),Bytes.toBytes("qual1"),Bytes.toBytes("val1"));
        put.add(Bytes.toBytes("colfam1"),Bytes.toBytes("qual2"),Bytes.toBytes("val2"));

        table.put(put);
    }
}

客户端写缓冲区

缓冲区负责收集put操作,然后调用RPC操作,将所有put请求发送。
缓冲区默认禁用,可用setAutoFlush启动。

每次put操作就是一次RPC操作,将客户端数据发送到服务器后返回,适合小数据量的操作。
开启缓冲区时,创建的PUT实例会存储在客户端的内存中,如果需要强制立即执行,则可用flumeCommits()

    void flushCommits() throws IOException

虽然可以通过强制刷新缓冲执行,但这操作有时是不必要的。因为API会统计每个用户添加实例的大小,计算缓冲的数据量并且知道其内的数据结构,如果超出缓冲区大小,则会自动调用刷写命令。
缓冲区大小默认为2MB
手动设置可通过修改hbase-site.xml:

<property>
    <name>hbase.client.write.buffer</name>
    <value>hbase.client.write.buffer</value>
</property>

缓冲区使用示例:

public class HbaseDemo {
    public static void main(String[] args) {
        Configuration conf = HBaseConfiguration.create();
        HTable table = new HTable(conf,"testTable");
        System.out.println("Auto flush:"+table.isAutoFlush);
        
        table.setAutoFlush(false);
        Put put1 = new Put(Bytes.toBytes("row1"));
        put1.add(Bytes.toBytes("colfam1"),Bytes.toBytes("qual1"),Bytes.toBytes("val1"));
        table.put(put1);

        Put put2 = new Put(Bytes.toBytes("row2"));
        put1.add(Bytes.toBytes("colfaml"),Bytes.toBytes("qual1"),Bytes.toBytes("val2"));
        table.put(put2);

        Put put3 = new Put(Bytes.toBytes("row3"));
        put1.add(Bytes.toBytes("colfaml"),Bytes.toBytes("quall"),Bytes.toBytes("val3"));
        table.put(put3);
        
        Get get = new Get(Bytes.toBytes("row1"));
        Result res1 = table.get(get);
        System.out.println("Result:" + res1);
        
        table.flushCommits();
        
        Result res2 = table.get(get);
        System.out.println("Result:"+res2);
    }
}
发布了79 篇原创文章 · 获赞 3 · 访问量 5223

猜你喜欢

转载自blog.csdn.net/SW_LCC/article/details/104041761