Hbase读操作
1、性能优化
在进行读数据时为了提高效率可以设置一次获取多少行,多少列,默认是一行一列。
通过
setCatch设置一次读取多少行
setBatch(batch);获取多少列
假设一个表中有5行 10列,默认情况下是每次读取只会拿到一行一列,所以在进行读取5行5列的数据时会进行多次RPC调用。
如果我们设置了批量获取行数和列数会减少RPC的调用次数,setCatch(5) setBatch(5) 则只会进行2两次RPC调用。
2、获取全部版本
在Hbase中通过get或者scan的方式只能是获取最新的版本,如果要获取所有的版本需要设置获取的版本大小即:
sc.setMaxVersions();或者开始sc.setMaxVersions(4)
假设一个数据表里面有5个版本,那么使用不带参数的方式设置的话会获取所有的版本数据,带有参数方式 设置了如果为4则会获取最新的4个版本。
在为scan或者是get设置好获取版本的信息后,读取所有版本的方式有两个:
List<KeyValue> li=result.list();
for(KeyValue kv : li){
System.out.println("--row:"+Bytes.toString(kv.getRow())+"--FamileL:"+Bytes.toString(kv.getFamily())+"--Qu:"+Bytes.toString(kv.getQualifier())+"--vALUE:"+Bytes.toString(kv.getValue()));
}
或者是:
List<KeyValue> li =rs.getColumn("fml".getBytes(), "contest".getBytes());//在所有行中只获取该列
for(KeyValue kv:li){
System.out.println(new String(kv.getKeyString())+"--->"+new String(kv.getValue()));
System.out.println(new String(kv.getFamily())+"--->"+new String(kv.getQualifier()));
}
通过rs.size() 或者是rs.rawCells().length可以获取该cell中有几个版本。
3、获取列的信息
在Hbase读取时,获取列的信息数据需要先拿到Result:
rs.rawCells() //获取各个列集合
new String(CellUtil.cloneQualifier(c))//获取某列的列名
new String(CellUtil.cloneValue(c))//某列的数据值