本文主要是从HBase应用程序设计与开发的角度,总结几种常用的性能优化方法。有关HBase系统配置级别的优化,可参考:淘宝Ken Wu同学的博客。

下面是本文总结的第四部分内容:数据计算相关的优化方法。

4. 数据计算

4.1 服务端计算

Coprocessor运行于HBase RegionServer服务端,各个Regions保持对与其相关的coprocessor实现类的引用,coprocessor类可以通过RegionServer上classpath中的本地jar或HDFS的classloader进行加载。

目前,已提供有几种coprocessor:

  • Coprocessor:提供对于region管理的钩子,例如region的open/close/split/flush/compact等;
  • RegionObserver:提供用于从客户端监控表相关操作的钩子,例如表的get/put/scan/delete等;
  • Endpoint:提供可以在region上执行任意函数的命令触发器。一个使用例子是RegionServer端的列聚合,这里有代码示例。

以上只是有关coprocessor的一些基本介绍,本人没有对其实际使用的经验,对它的可用性和性能数据不得而知。感兴趣的同学可以尝试一下,欢迎讨论。

4.2 写端计算

4.2.1 计数

HBase本身可以看作是一个可以水平扩展的Key-Value存储系统,但是其本身的计算能力有限(Coprocessor可以提供一定的服务端计算),因此,使用HBase时,往往需要从写端或者读端进行计算,然后将最终的计算结果返回给调用者。举两个简单的例子:

  • PV计算:通过在HBase写端内存中,累加计数,维护PV值的更新,同时为了做到持久化,定期(如1秒)将PV计算结果同步到HBase中,这样查询端最多会有1秒钟的延迟,能看到秒级延迟的PV结果。
  • 分钟PV计算:与上面提到的PV计算方法相结合,每分钟将当前的累计PV值,按照rowkey + minute作为新的rowkey写入HBase中,然后在查询端通过scan得到当天各个分钟以前的累计PV值,然后顺次将前后两分钟的累计PV值相减,就得到了当前一分钟内的PV值,从而最终也就得到当天各个分钟内的PV值。

4.2.2 去重

对于UV的计算,就是个去重计算的例子。分两种情况:

  • 如果内存可以容纳,那么可以在Hash表中维护所有已经存在的UV标识,每当新来一个标识时,通过快速查找Hash确定是否是一个新的UV,若是则UV值加1,否则UV值不变。另外,为了做到持久化或提供给查询接口使用,可以定期(如1秒)将UV计算结果同步到HBase中。
  • 如果内存不能容纳,可以考虑采用Bloom Filter来实现,从而尽可能的减少内存的占用情况。除了UV的计算外,判断URL是否存在也是个典型的应用场景。

4.3 读端计算

如果对于响应时间要求比较苛刻的情况(如单次http请求要在毫秒级时间内返回),个人觉得读端不宜做过多复杂的计算逻辑,尽量做到读端功能单一化:即从HBase RegionServer读到数据(scan或get方式)后,按照数据格式进行简单的拼接,直接返回给前端使用。当然,如果对于响应时间要求一般,或者业务特点需要,也可以在读端进行一些计算逻辑。

5. 总结

作为一个Key-Value存储系统,HBase并不是万能的,它有自己独特的地方。因此,基于它来做应用时,我们往往需要从多方面进行优化改进(表设计、读表操作、写表操作、数据计算等),有时甚至还需要从系统级对HBase进行配置调优,更甚至可以对HBase本身进行优化。这属于不同的层次范畴。

总之,概括来讲,对系统进行优化时,首先定位到影响你的程序运行性能的瓶颈之处,然后有的放矢进行针对行的优化。如果优化后满足你的期望,那么就可以停止优化;否则继续寻找新的瓶颈之处,开始新的优化,直到满足性能要求。

以上就是从项目开发中总结的一点经验,如有不对之处,欢迎大家不吝赐教。

HBase性能优化方法总结(四):数据计算相关推荐

  1. HBase性能优化方法总结(4):读表操作

    来自:http://www.cnblogs.com/panfeng412/archive/2012/03/08/hbase-performance-tuning-section3.html 本文主要是 ...

  2. HBase性能优化方法总结(3):写表操作

    本文主要是从HBase应用程序设计与开发的角度,总结几种常用的性能优化方法.有关HBase系统配置级别的优化,可参考:淘宝Ken Wu同学的博客. 下面是本文总结的第二部分内容:写表操作相关的优化方法 ...

  3. HBase性能优化方法总结(2):表的设计

    本文主要是从HBase应用程序设计与开发的角度,总结几种常用的性能优化方法.有关HBase系统配置级别的优化,可参考:淘宝Ken Wu同学的博客. 下面是本文总结的第一部分内容:表的设计相关的优化方法 ...

  4. HBase性能优化方法总结(1):配置优化

    配置优化 zookeeper.session.timeout 默认值:3分钟(180000ms) 说明:RegionServer与Zookeeper间的连接超时时间.当超时时间到后,ReigonSer ...

  5. HBase性能优化方法总结(三):读表操作

    3. 读表操作 3.1 多HTable并发读 创建多个HTable客户端用于读操作,提高读数据的吞吐量,一个例子: static final Configuration conf = HBaseCon ...

  6. HBase性能优化方法总结(二):写表操作

    2. 写表操作 2.1 多HTable并发写 创建多个HTable客户端用于写操作,提高写数据的吞吐量,一个例子: static final Configuration conf = HBaseCon ...

  7. HBase性能优化方法总结(一):表的设计

    1. 表的设计 1.1 Pre-Creating Regions 默认情况下,在创建HBase表的时候会自动创建一个region分区,当导入数据的时候,所有的HBase客户端都向这一个region写数 ...

  8. HBase性能优化方法总结

    目录 1. 表的设计 1.1 Pre-Creating Regions 1.2 Row Key 1.3 Column Family 1.4 In Memory 1.5 Max Version 1.6 ...

  9. HBase性能优化总结

    HBase性能优化方法总结(一):表的设计 1. 表的设计 1.1 Pre-Creating Regions 默认情况下,在创建HBase表的时候会自动创建一个region分区,当导入数据的时候,所有 ...

最新文章

  1. 【408预推免复习】计算机组成原理之计算机的发展及应用
  2. 课程名称翻译大全(zz)
  3. java 动态按钮_java-向片段动态添加按钮
  4. 边缘应用增长 800%,听听 Akamai 边缘部署的经验
  5. Cloud一分钟 | 谷歌投资的AR云平台开发商Blue Vision Labs,将由美版滴滴Lyft收购
  6. java java.doc_使用 javadoc 自动生成 Java 文档
  7. 软件基本功:做自说明的测试文档,
  8. 邓仰东专栏|机器学习的那些事儿(四):基于GPU的机器学习实例之AlphaGO
  9. 互联网盈利模式,网络策划运营模式
  10. Spring课程 Spring入门篇 5-6 introductions应用
  11. 给我“空降”一个弟兄
  12. Css动画效果旋转图片
  13. 堆栈与动态分配内存空间
  14. 【自学Java】Java语言特点
  15. kernel获取毫秒、微妙时间
  16. 制造业信息化的长治久安之计--Agentflow解决方案简介
  17. maven异常记录-must be unique
  18. 数据可视化:使用Excel制作雷达图
  19. 围场一中2021高考成绩查询,2017围场一中录取分数线及2017高考成绩喜报
  20. 组合保险策略及相应模拟测算工具----Discrete Hedging: Guaranteed CPPI Structures

热门文章

  1. 百度的云智一体,让视频变得“硬核性感”
  2. 7999元大疆最新无人机,支持第一人称视角极速拍摄,网友:不是航拍,是直接起飞...
  3. 小米副总裁崔宝秋:智能手机是今天AI技术最大的平台,AIoT又让AI无处不在 | MEET 2021...
  4. 姚班天才漆子超、IOI金牌得主陈启峰等联手进军AR领域:全员顶尖科技公司技术背景,打造“5G+AI+AR”先锋...
  5. 李飞飞、邓中翰当选美国国家工程院院士
  6. 一个API调用27个NLP预训练模型:BERT、GPT-2全囊括,像导入NumPy一样容易
  7. web人力资源信息系统开发日志②
  8. 使用SKIP-GRANT-TABLES 解决 MYSQL ROOT密码丢失
  9. 2009年依然兑现不了的10大IT安全预期
  10. 开心网外挂开发之 XML序列化于反序列化