步骤
- 获取table对象
- 根据rowkey构建Get对象
- 执行get方法
- 获取所有单元格,取出数据
- 关闭table
java
在 hbase2.1.x java 创建工程 例子中增加下面代码
import
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
关键代码
/**
* get指令
* @param tableName
* @param rowKey
* @param columnFamily,查询指定列族,为null表示全查
* @param qualifier,查询指定列,为null表示全查
* @return
* @throws IOException
*/
public List<CellData> get(String tableName,String rowKey,String columnFamily,String qualifier) throws IOException {
//获取table对象
Table table = conn.getTable(TableName.valueOf(tableName));
//根据rowkey构建Get对象
Get get = new Get(Bytes.toBytes(rowKey));
if(qualifier!=null && !"".equals(qualifier)){
// 如果 qualifier 不为空,那么就读取 columnFamily 列族中 qualifier 列的数据
get.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(qualifier));
}
if (columnFamily != null && !"".equals(columnFamily) && ( qualifier==null || "".equals(qualifier))) {
// 如果 columnFamily 不为空,qualifier为空,那么就读取 columnFamily 列族中的所有数据
get.addFamily(Bytes.toBytes(columnFamily));
}
//执行get方法
Result result=table.get(get);
//获取rowkey
String rowkey=Bytes.toString(result.getRow());
//封装返回结果
List<CellData> retList=new ArrayList<>();
//获取所有单元格
Cell[] resultList=result.rawCells();
if(resultList!=null) {
for (Cell item : resultList) {
// String family=Bytes.toString(item.getFamilyArray(),item.getFamilyOffset(),item.getFamilyLength());
// String qualifier=Bytes.toString(item.getQualifierArray(),item.getQualifierOffset(),item.getQualifierLength());
// String value=Bytes.toString(item.getValueArray(),item.getValueOffset(),item.getValueLength());
String family = Bytes.toString(CellUtil.cloneFamily(item));
String qualifierOfDb = Bytes.toString(CellUtil.cloneQualifier(item));
String value = Bytes.toString(CellUtil.cloneValue(item));
String row = Bytes.toString(CellUtil.cloneRow(item));
// System.out.println(row); // rowkey
long timestamp = item.getTimestamp();
CellData data = new CellData(family, qualifierOfDb, rowkey, timestamp, value);
retList.add(data);
}
}
//关闭
table.close();
return retList;
}
测试
public static void main(String[] args) throws IOException {
HbaseUtils4_crud utils=new HbaseUtils4_crud();
utils.connect("hadoop1,hadoop2,hadoop3","2181");
// List<CellData> res = utils.get("book", "1002",null,null);
// List<CellData> res = utils.get("book", "1002","c2",null);
List<CellData> res = utils.get("book", "1002","c2","title");
for(CellData item : res){
String family = item.getFamily();
String column = item.getQualifier();
Object value = item.getValue();
long timestamp = item.getTimestamp();
System.out.println(family+":"+column+"-"+timestamp+" == "+value);
}
utils.close();
}