对于Table内RowKey个数的统计,一直是HBase系统面临的一项重要工作,目前有两种执行该操作的方式。
1)使用MapReduce进行。可以借助HTableInputFormat实现对于Rowkey的划分,但是需要占用资源,另外由于使用的Hadoop集群提交作业,经常会遇到不能申请到资源的情况,延迟较大,不适合应用的频繁访问。
2)使用Scan+KeyOnlyFilter的方式进行。可以借助Filter的功能,尽可能实现数据在RegionServer端进行统计,减轻Client端的压力。但是,在大多数情况下,从每一个Region上进行Scan,当Table较大时,会造成非常长的延迟,用户体验下降。
基于此,我们考虑到了Coprocessor这样的新特性。
操作上,HBase-0.92.1提供了
org.apache.hadoop.hbase.coprocessor.AggregateImplementation,我们需要对于某一个Table注册该Coprocessor,具体做法为:
String coprocessClassName = "org.apache.hadoop.hbase.coprocessor.AggregateImplementation"; HBaseAdmin admin = new HBaseAdmin(HBaseConfiguration.create()); admin.disableTable(tableName); HTableDescriptor htd = admin.getTableDescriptor(tableName); htd.addCoprocessor(coprocessClassName); admin.modifyTable(tableName, htd); admin.enableTable(tableName); |
然后执行的代码如下:
Scan s = new Scan(); s.addColumn(Bytes.toBytes("cf1"), Bytes.toBytes("c1")); AggregationClient ac = new AggregationClient(HBaseConfiguration.create()); try { return ac.rowCount(tableName, new LongColumnInterpreter(), s); } catch (Throwable e) { // TODO Auto-generated catch block e.printStackTrace(); } return 0;
为了统计使用Scan增加KeyOnlyFilter和Coprocessor之间的区别,记录了500次操作的时间,性能对比图如下:
从上图中,可以看出,大部分通过Coprocessor获取RowCount个数的延迟,小于1s,而使用Scan的方式,获得RowKeyCount的个数大概在4~5s。(备注,检查的table的Rowkey的个数在3w左右)。
那么究竟是什么原因让Coprocessor在统计Rowkey的个数上,拥有如此明显的优势呢?
这是因为在Table注册了Coprocessor之后,在执行AggregationClient的时候,会将RowCount分散到Table的每一个Region上,Region内RowCount的计算,是通过RPC执行调用接口,由Region对应的RegionServer执行InternalScanner进行的。
因此,性能的提升有两点原因:
1) 分布式统计。将原来客户端按照Rowkey的范围单点进行扫描,然后统计的方式,换成了由所有Region所在RegionServer同时计算的过程。
2)使用了在RegionServer内部执行使用了InternalScanner。这是距离实际存储最近的Scanner接口,存取更加快捷。
From Binospace, post HBase性能优化2—使用Coprocessor进行RowCount统计
文章的脚注信息由WordPress的wp-posturl插件自动生成
相关推荐
然而,随着数据量的增长,如何进行有效的性能优化变得至关重要。本文将深入探讨HBase性能优化的各种策略,旨在帮助你提升数据操作的效率。 一、硬件优化 1. **磁盘选择**:HBase对I/O性能要求较高,因此推荐使用SSD...
通过上述介绍可以看出,HBase Coprocessor不仅能够显著提高HBase的灵活性和功能性,还能通过合理的优化措施进一步提升系统的整体性能。对于大型分布式系统而言,合理利用Coprocessor可以极大地改善用户体验,并为...
——HBase性能优化 1、从配置角度优化 1.1 修改Linux配置 Linux系统最大可打开文件数一般默认的参数值是1024,如果你不进行修改并发量上来的时候会出现“Too Many Open Files”的错误,导致整个HBase不可运行,你...
讲师:陈杨——快手大数据高级研发工程师 ...内容概要:(1)讲解hbase coprocessor的原理以及使用场景,(2) coprocessor整个流程实战,包括开发,加载,运行以及管理(3)结合1,2分析coprocessor在rsgroup中的具体使用
本篇将详细阐述如何在Hadoop 2.7.1环境下搭建HBase 1.2.1集群,并进行性能优化,以提升系统效率。 首先,我们需要了解Hadoop和HBase的基本概念。Hadoop是基于分布式文件系统HDFS(Hadoop Distributed File System)...
除了上述提到的优化方法,HBase的性能优化还可以涉及更多的方面,如合理调整HBase配置、分区和负载均衡策略、压缩和存储优化、监控和诊断等。在HBase集群中,还可能通过调整HMaster和HRegionServer的相关参数来...
### HBase性能优化知识点汇总 #### HDFS优化 - **存储机制**: HBase使用HDFS存储WAL(Write-Ahead Log)和HFiles。默认情况下,HDFS不会实时同步数据到磁盘,而是写入临时文件后移动到最终位置,导致在断电情况下...
2. **配置Coprocessor**:在HBase的表或列族配置中,添加Coprocessor的类路径和优先级。这样,每当有数据写入时,Coprocessor就会被触发执行。 3. **连接Elasticsearch**:在Coprocessor中,使用Elasticsearch的...
在HBase性能优化的过程中,表设计和RowKey的设计是至关重要的。预分区是表设计的一个重要环节,目的是避免因表的自动split导致的资源消耗和性能影响。预分区可以根据业务需求预先设定rowkey的范围,比如在例子中,...
然而,随着数据量和访问量的增加,如何对HBase的写性能进行优化成为一个重要的议题。本文旨在提供一系列优化策略,以提高HBase的写入效率和数据写入的稳定性。 首先,要理解HBase写入数据的基本流程:数据首先顺序...
在HBase性能优化中,有两个关键的配置参数需要关注:`hbase.hregion.max.filesize`和`autoflush`设置。这些参数对HBase的写入性能、数据一致性和系统稳定性有显著影响。 1. `hbase.hregion.max.filesize`的设定: ...
下面我们将根据标题和描述中提到的关于HBase读性能优化策略进行详细的知识点阐述。 首先,FullGC异常导致宕机问题、RIT问题、写吞吐量太低以及读延迟较大是HBase系统中常见的一些问题。FullGC异常主要是由于Java...
"HBase性能优化" HBase是一种高性能的NoSQL数据库,广泛应用于大数据存储和处理领域。然而,HBase的性能优化是非常重要的,特别是在大规模数据集群环境中。以下是HBase性能优化的相关知识点: 启用LZO压缩 HBase...
### Hadoop集群(第12期副刊)-HBase性能优化 #### 一、从配置角度优化HBase性能 **1.1 修改Linux配置** Linux系统默认的最大可打开文件数通常设定为1024个,这对于大多数应用场景来说可能足够,但在高并发环境下...
本文将深入探讨HBase的性能测试细节,重点剖析数据插入性能,并通过实证分析揭示其背后的机制与优化策略。 #### 数据插入性能测试设计 在评估HBase的实时数据插入性能时,测试场景设计至关重要。以随机值的Rowkey...
《深入理解HBase Coprocessor:扩展与应用》 HBase Coprocessor 是一个强大的功能,它为HBase提供了一种扩展...在实际应用中,合理利用Coprocessor可以显著提升HBase的性能和功能,是优化HBase应用的关键技术之一。
在HBase这样的分布式列式数据库中,读性能的优化至关重要,因为它直接影响到应用程序的响应速度和用户体验。本文主要探讨了HBase服务器端的读性能优化策略,这些策略可以帮助解决读延迟大、资源消耗高和负载不均衡等...