如何在Hbase中使用筛选器计算行数?

如何在Hbase中使用筛选器计算行数?,hbase,Hbase,我只需要在扫描中找出结果的行数。下面代码的问题是,它返回行键和列键,这使得将数据传送到客户端时速度非常慢。我只需要将扫描结果中的行数发送到客户端。有没有具体的方法可以直接做到这一点 scan 'consumer-data', {FILTER => " PrefixFilter('test_row') AND KeyOnlyFilter() AND FirstKeyOnlyFilter() AND ((ColumnPrefixFilter('test_col:test1') AND

我只需要在扫描中找出结果的行数。下面代码的问题是,它返回行键和列键,这使得将数据传送到客户端时速度非常慢。我只需要将扫描结果中的行数发送到客户端。有没有具体的方法可以直接做到这一点

scan 'consumer-data', {FILTER => "
PrefixFilter('test_row') 
AND KeyOnlyFilter() 
AND FirstKeyOnlyFilter() 
AND ((ColumnPrefixFilter('test_col:test1') 
AND ValueFilter(=, 'binary:test 1')) 
"}

任何帮助都将不胜感激。

您编写的代码非常慢。先过扫描按顺序工作,无贴图/缩小,因此开始时速度较慢。然后使用两个慢速过滤器,一个用于查看列名称,另一个用于查看值您得到的是一个接一个的顺序读取,它检查每一列和匹配列的值


如果您希望定期运行这样的查询,您应该重新考虑您的密钥。还可以将其作为map/reduce作业重新执行,这样至少它会划分工作

Yoy可以通过hbase shell执行以下命令来完成

hbase(main):002:0> count 'consumer-data'

对于这种情况,我想给你两个选择

使用MapReduce作业。您应该编写自己的MR作业,以便在整个集群中实际运行计数作业

使用多线程。您可以编写多线程扫描任务,以使用hbase区域上的筛选器计数。例如:每个区域1个线程进行计数


仅供参考:我以前尝试过这两种策略,测试结果表明它们的性能相似。可能不正确,但肯定比您当前的实现更快

我使用的最简单的选项是在Hbase上创建配置单元表,然后使用HQL查询配置单元表。您可以添加where子句和所有类型的条件。。。这将在内部自动为您创建MapReduce作业,并在集群中运行,所以您不必担心运行多线程和编写MR代码

示例如下:

CREATE EXTERNAL TABLE emp(id int, city string, name string, occupation string, salary int) 
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,
                   personal_data:city,
                   personal_data:name,
                   professional_data:occupation,
                   professional_data:salary")
TBLPROPERTIES ("hbase.table.name" = "emp", "hbase.mapred.output.outputtable" = "emp");

Select count(*) from emp where city = 'LA';

我需要用过滤器进行计数。count方法不支持筛选器,只有scan方法支持。