如何快速统计 HBase 里面有多少行数据

我现在有个需求,就是需要实时统计出 HBase 里面到底有多少行的数据,现在我的实现如下:
for (Result rs = scanner.next(); rs != null; rs = scanner.next()) {
number++;
}
如果数据量达到数百万,使用上面的方法计算时间会变得很大。这肯定不是好的办法,大家有什么实现思路呢?
已邀请:

hbasegroup

赞同来自: 过往记忆 Leo

可以试试 HBase 里面的 RowCounter 。RowCounter 内部是使用 MapReduce 来计算一个表里面的行数。使用方法如下:
$ hbase org.apache.hadoop.hbase.mapreduce.RowCounter <tablename>

Usage: RowCounter [options]
<tablename> [
--starttime=[start]
--endtime=[end]
[--range=[startKey],[endKey]]
[<column1> <column2>...]
]

beyond

赞同来自: hbasegroup

利用协处理器里的rowcount或者在hbase 存入数据时设置一个计数字段count 来读取

yangjifei - 士为知己者死

赞同来自:

是否可以使用hbase shell脚本实现?

hbase - 80后

赞同来自:

这么大的数据量,统计有啥意义吧。实在要统计,就跑一个mr吧。

stony

赞同来自:

真想做到实时,就在插入的时候记录吧

yangjifei - 士为知己者死

赞同来自:

也可以调用MR:
hbase org.apache.hadoop.hbase.mapreduce.RowCounter ‘tablename’

oysl - 90后

赞同来自:

利用协处理器

zhangleiHbase

赞同来自:

可以利用org.apache.hadoop.hbase.coprocessor.AggregateImplementation 协处理器实现,经测试性能由很大提升,但如果数据量太大,速度还是不太理想

soso24w

赞同来自:

最简单的方法,hbase shell命令
count 'tableName',INTERVAL => 5000000,CACHE => 5000000
INTERVAL为统计的行数间隔,默认为1000,CACHE为统计的数据缓存

要回复问题请先登录注册


中国HBase技术社区微信公众号:
hbasegroup

欢迎加入HBase生态+Spark社区钉钉大群