3

是否可以通过 hbase java API 通过行 ID 列表获取 hbase 数据记录?

例如,我有一个已知的 hbase 行 ID 列表:

mykey1:myhash1, mykey1:myhash2, mykey1:myhash3, mykey2:myhash5, ...

我想通过一次调用来获得所有相关的列单元格信息。我对 hbase 很陌生,我不知道 API 是否支持这一点。

API伪代码:

GetById(String tableName, List<byte[]> rowIds);

类似的东西?

我可以使用 检索单行信息Get(byte[] rowName),但是当我有 rowIds 列表时,我需要多次执行 get 操作,这会导致建立连接并在每次完成时关闭它。

谢谢

4

2 回答 2

15

Get将操作列表传递给批处理调用:

...
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.util.Bytes;
...
        HTable htable = null;
        try {
            htable = new HTable(conf, "mytable");
            List<Get> queryRowList = new ArrayList<Get>();
            queryRowList.add(new Get(Bytes.toBytes("mykey1:myhash1")));
            queryRowList.add(new Get(Bytes.toBytes("mykey1:myhash2")));
            queryRowList.add(new Get(Bytes.toBytes("mykey1:myhash3")));
            queryRowList.add(new Get(Bytes.toBytes("mykey2:myhash5")));

            Result[] results = htable.get(queryRowList);
            for (Result r : results) {
                //do something
            }
        }
        finally {
            if (htable != null) {
                htable.close();
            }
        }
...
于 2012-11-11T20:24:02.817 回答
0

您可以将MultiAction用作可以批量执行的多个 get(或 put、delete 和它们的组合)的容器。

也就是说,请注意,您可以执行多个 get 操作,而无需每次都关闭/重新打开连接。

于 2012-11-09T16:51:23.847 回答