分布式数据库HBase本身不支持SQL语法,要统计表的行数,只能通过其他的方式来实现。HBase的shell脚本提供了count命令,但该命令只是简单地scan全表然后将行数累加,效率很低只能用于测试或者统计小表了。另一解决方案是使用MapReduce,HBase自身提供了org.apache.hadoop.hbase.mapreduce.RowCounter类,可以方便地在命令行调用进行统计,但执行效率仍难以达到我们的需求。HBase 0.92引入了Coprocessor这项特性,可以很方便地在RegionServer端实现各类聚集操作,通过AggregationClient#rowCount这个接口就可以相对高效地统计表的行数了。
Coprocessor提供了Observer和Endpoint两项特性,前者允许通过重写函数在RegionServer端注入用户代码,后者则相当于数据库中的触发器(详细介绍参考Reference[1])。社区依此为聚集操作提供了AggregateProtocol接口和AggregateImplement实现,我们使用AggregationClient就可以并发对每个region进行rowCount等操作,同时设置了FirstKeyOnlyFilter以提高执行效率,然后将结果返回client端进行累加,与直接scan全表相比极大提高了统计的并行度,配置HBase使用Coprocessor可以参考Reference[2]。
当然,我们在实际统计过程中也遇到了不少的问题,首先就是跑Coprocessor消耗了太多系统资源。如果全速跑的话,每个region线程都可能把100%的CPU利用率耗完,当一台RegionServer有多个region时对其他服务的影响就更大了,这对在线业务可是不能接受的。我们的解决方案是选择在凌晨低峰期跑,而且优先选择离线集群和备集群,于是我们实现了CoprocessorRowcounter这样一个工具,在给定的时间内调用统计函数并将结果输出到本地或HBase数据库中,代码已经反馈到社区了(请参考Reference[3])。但实际上如果不限制并行scan的region数和访问的qps,这个程序还是有可能把RegionServer跑垮,于是我们改进了AggregationClient的线程池,允许用户指定最大的并发数,同时加入对qps的限制,保证对服务端不会有过于频繁的访问。还有一个微小的改进,就是对划分出来的region key数组进行shuffle,然后将数组依次放入线程池中,这样尽可能保证了scan的压力可以均分到每台RegionServer上。开发时还发现rowCount必须指定colum family,于是找到相应的issue并backport到0.94(详见Reference[4]),问题解决同时反馈到社区了。
CoprocessorRowcounter已经在实践中统计了我们大部分表的行数,正确性也经过了验证,存在的问题主要是资源占用率过高,不宜用于在线集群。其次效率仍需提高,即使能够对region进行并发操作,大表的统计仍需要分钟级甚至是小时级的耗时。实践也发现每次rpc调用时间都比正常操作长很多,所以务必将hbase.rpc.timeout设置为Integer.MAX_VALUE,才能保证程序不会因为rpc超时而退出。
Reference:
[1]Coprocessor Introduction http://blogs.apache.org/hbase/entry/coprocessor_introduction
[2]HBase Aggregation Example http://michaelmorello.blogspot.jp/2012/01/row-count-hbase-aggregation-example.html
[3]CoprocessorRowcounter Issue https://issues.apache.org/jira/browse/HBASE-9800
[4]Backport HBASE-9605 https://issues.apache.org/jira/browse/HBASE-9830
相关推荐
hbase-region-inspector, HBase区域统计信息的可视化仪表板 hbase-region-inspectorHBase区域统计信息的可视化仪表板。 用法下载与HBase集群版本匹配的可执行二进制插件,添加execute权限,并使用以下命令行参数启动...
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设...基于spark streaming+kafka+hbase的日志统计分析系统源码+项目说明.zip
基于spark streaming和kafka,hbase的日志统计分析系统 仅用于学习和参考
java 利用 sping-data-hadoop HbaseTemplate 操作hbase find get execute 等方法 可以直接运行
搭建pinpoint需要的hbase初始化脚本hbase-create.hbase
HBase(hbase-2.4.9-bin.tar.gz)是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System...
1. HBase有哪些基本的特征? 1 HBase特征: 1 2. HBase相对于关系数据库能解决的问题是什么? 2 HBase与关系数据的区别? 2 HBase与RDBMS的区别? 2 3. HBase的数据模式是怎么样的?即有哪些元素?如何存储?等 3 1...
Hbase应用开发实验报告及代码;(1) 列出HBase所有的表的相关信息,...(4) 清空指定的表的所有记录数据(5) 统计表的行数。2. 现有以下关系型数据库中的表和数据,要求将其转换为适合于HBase存储的表并插入数据:
hbase-sdk是基于hbase-client和hbase-thrift的原生API封装的一款轻量级的HBase ORM框架。 针对HBase各版本API(1.x~2.x)间的差异,在其上剥离出了一层统一的抽象。并提供了以类SQL的方式来读写HBase表中的数据。对...
1. 请用java集合的代码描述HBase的表结构 2. 请简述HBase中数据写入最后导致Region分裂的全过程 3. 如果设计一个笔记的表,表中要求有笔记的属性和笔记的内容,怎么做 4. HBase部署时如何指定多个zookeeper 5. HBase...
HBase 官方文档.pdf HBase的操作和编程.pdf HBase Cpressr优化与实验 郭磊涛.pdf null【HBase】Data Migratin frm Gri t Clu Cmputing - Natural Sienes .pdf 分布式数据库HBase快照的设计与实现.pdf 【HBase】...
注意:zookeeper3.4.13和hbase2.3.5都是采用docker-compose方式部署 原文链接:https://blog.csdn.net/m0_37814112/article/details/120915194 说明:使用外部zookeeper3.4.13之hbase2.3.5一键部署工具,支持部署、...
HBase开发实战,HBase学习利器:HBase实战
A.3实验三:熟悉常用的HBase操作 本实验对应第5章的内容。 A.3.1 实验目的 (1)理解HBase在Hadoop体系结构中的角色。(2)熟练使用HBase操作常用的 Shell命令。(3)熟悉HBase操作常用的 Java API。 A.3.2 实验平台 (1...
HBase开启审计日志
从HBase的集群搭建、HBaseshell操作、java编程、架构、原理、涉及的数据结构,并且结合陌陌海量消息存储案例来讲解实战HBase 课程亮点 1,知识体系完备,从小白到大神各阶段读者均能学有所获。 2,生动形象,化繁为...
如果你正在寻找一种具备可伸缩性的存储解决方案来适应几乎没有穷尽的数据的话,这本书将可以向你表明apache hbase完全能够满足你的需求。作为google bigtable架构的开源实现,hbase能够支持数以十亿计的记录数和数以...
hbase 资源合集 hbase 企业应用开发实战 权威指南 hbase 实战 hbase 应用架构
│ Day15[Hbase 基本使用及存储设计].pdf │ ├─02_视频 │ Day1501_Hbase的介绍及其发展.mp4 │ Day1502_Hbase中的特殊概念.mp4 │ Day1503_Hbase与MYSQL的存储比较.mp4 │ Day1504_Hbase部署环境准备.mp4 │ Day...