如何列出 hbase 表中的所有行键?

Posted

技术标签:

【中文标题】如何列出 hbase 表中的所有行键?【英文标题】:How to list all row keys in an hbase table? 【发布时间】:2011-07-11 00:38:21 【问题描述】:

我需要使用带有 REST 接口的 php 来执行此操作。

【问题讨论】:

how to list all row keys in an hbase table?的可能重复 这是 hbase_user 试图在另一个问题中提出的问题的副本......但这不是实际询问(或回答)的内容。 【参考方案1】:

如果您列出 HBase 表中的所有键,那么您使用了错误的工具。 HBase 适用于无法列出所有键的大型数据系统。

可能更明智的做法是从给定键开始并列出接下来的 N 个键(对于 N 小于 10K 的值)。有很好的 Java 接口可以通过扫描来完成这类事情——设置开始键和/或结束键。

大多数 HBase 功能都是通过 Thrift 接口公开的。我建议去那里看看

【讨论】:

嗨,大卫,感谢您的回复。我正在尝试使用 REST 接口,并找到了一些在限制范围内扫描表的方法。不幸的是,它无法正常工作,因为它应该在我的集群中。如果我回去搜索 Thrift,它会浪费我很多工作时间!如果你有什么好的工作方式来使用 REST 接口连接 hbase 和 php,请上来帮助我!【参考方案2】:

我找到了办法..

http://localhost:8080/tablename/* 将返回一个 xml 数据,我可以对其进行预匹配以获取行。

邀请更好的建议..

【讨论】:

【参考方案3】:

我不知道 REST 接口是什么样的,但您可能希望从客户端过滤掉一些数据以避免大型 RPC 响应。您可以通过在扫描中添加服务器端过滤器来做到这一点:

Scan s = new Scan();
FilterList fl = new FilterList();
// returns first instance of a row, then skip to next row
fl.addFilter(new FirstKeyOnlyFilter());
// only return the Key, don't return the value
fl.addFilter(new KeyOnlyFilter());
s.setFilter(fl);

HTable myTable;
ResultScanner rs = myTable.getScanner(s);
Result row = rs.next();
while (row != null) ...

http://svn.apache.org/repos/asf/hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/filter/

【讨论】:

【参考方案4】:

这...

http://localhost:8080/tablename/*/columnfamily:columnid 

...将返回表中相对于该表中该列的所有值,有点像在扫描仪中应用列过滤器。

此外,如果您要查找多列 - 用逗号分隔它们。

所以:/tablename/*/columnfamily:columnid,columnfamily:columnid2

【讨论】:

以上是关于如何列出 hbase 表中的所有行键?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置开始和结束行键 HBASE

HBase 获取行键所在的值

hbase 行键设计

使用 Hbase 过滤器搜索有空格但没有空格的行键

是否有一个聪明的 HBase 模式来帮助发现缺失值?

HBase里的优秀行键设计