Hbase 常用的java api中 常通过连接创建table对象,使用此table对象完成单条数据的插入。常规使用方式如下。
Table table = connection.getTable(TableName.valueOf(nameSpace, tableName));
Put put = new Put(Bytes.toBytes(rowKey));
put.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(columnName),Bytes.toBytes(value));
try {
table.put(put);
}catch (Exception e){
e.printStackTrace();
}
table.close();
向Hbase中执行插入单条数据时(即 table.put(put)),会经历 客户端Client发出写入请求 -> 服务端RegionSever写入WAL和MemStore的执行过程。
在RegionServer客户端,会调用HRegion类doMiniBatchMutate方法实现数据的插入。Hbase2.2版本中doMiniBatchMutate方法大致执行流程如下。
由于Client属于同步客户端类型,会等待RegionSever写入操作完成并返回反馈后进行下一条数据的插入。
所以最开始代码片段中的 table.put(put)执行后此时再去Hbase表反查此条数据,是可以读到这条数据的。
附:
同步客户端和异步客户端的区别如下(参考《HBase原理与实践》15.5节)
Hbase 2.0版中引入了异步客户端(对应着AsyncTable). 两类Table大致区别如下。