hbase2.1.x java get根据rowkey获取数据

上接:hbase2.1.x java 创建工程

步骤

  1. 获取table对象
  2. 根据rowkey构建Get对象
  3. 执行get方法
  4. 获取所有单元格,取出数据
  5. 关闭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();
}

原文出处:/show_1IX1wiRRm0mr.html