转载自:http://www.hbase.group/article/41
有些时候需要我们去统计某一个hbase表的行数,由于hbase本身不支持SQL语言,只能通过其他方式实现。可以通过一下几种方式实现hbase表的行数统计工作:
1.count命令
最直接的方式是在hbase shell中执行count的命令可以统计行数。 hbase> count ‘t1′ hbase> count ‘t1′, INTERVAL => 100000 hbase> count ‘t1′, CACHE => 1000 hbase> count ‘t1′, INTERVAL => 10, CACHE => 1000
其中,INTERVAL为统计的行数间隔,默认为1000,CACHE为统计的数据缓存。这种方式效率很低,如果表行数很大的话不建议采用这种方式。 2. 调用Mapreduce
$HBASE_HOME/bin/hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'tablename'
这种方式效率比上一种要高很多,调用的hbase jar中自带的统计行数的类。 3.hive over hbase 如果已经见了hive和hbase的关联表的话,可以直接在hive中执行sql语句统计hbase表的行数。 hive over hbase 表的建表语句为:
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Hive中创建与HBase关联的表时,通常会使用Hive的HBase存储处理器(HBaseStorageHandler),这样可以直接通过Hive SQL查询HBase中的数据。建表语句示例如下:
CREATE TABLE hbase_table_hive (
row_key string,
column1 string,
column2 string
) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES (
"hbase.columns.mapping" = ":key,family1:column1,family1:column2"
)
TBLPROPERTIES ("hbase.table.name" = "t1");
在这个例子中: - hbase_table_hive
是你在Hive中创建的表名。 - row_key
, column1
, column2
分别对应HBase表中的列和列族结构。 - "hbase.columns.mapping"
属性指定了Hive表字段与HBase列族、列的映射关系,其中:key
代表Row Key,family1:column1
和family1:column2
分别代表HBase中列族family1
下的column1
和column2
列。 - "hbase.table.name"
属性指定了这个Hive表关联的HBase表名,这里是t1
。
统计行数的Hive SQL命令很简单:
SELECT COUNT(*) FROM hbase_table_hive;
这条命令将直接返回HBase表t1
通过Hive访问到的行数。这种方式相比直接使用HBase shell的count命令效率更高,特别是在处理大规模数据集时,因为Hive能够利用MapReduce或Tez等执行框架进行并行计算。