HBase BlockCache系列 - 性能对比测试报告

HBase BlockCache系列文章到了终结篇,几个主角的是是非非也该有个了断了,在SlabCache被早早地淘汰之后,站在华山之巅的也就仅剩LRU君(LRUBlockCache)和CBC君(CombinedBlockCache)。谁赢谁输,我说了不算,你说了也不算,那就来让数据说话。这篇文章主要对比LRU君和CBC君(offheap模式)分别在四种场景下几种指标(GC、Throughput、Latency、CPU、IO等)的表现情况。四种场景分别是缓存全部命中、少大部分缓存命中、少量缓存命中、缓存基本未命中。

需要注意的是,本文的所有数据都来自社区文档,在这里分享也只是给大家一个参考,更加详细的测试数据可以阅读文章《Comparing BlockCache Deploys》和 HBASE-11323 附件报告。

说明:本文所有图都以时间为横坐标,纵坐标为对应指标。每张图都会分别显示LRU君和CBC君的四种场景数据,总计八种场景,下面数据表示LRU君的四种场景分布在时间段21:36:39~22:36:40,CBC君的四种场景分布在时间段23:02:16~00:02:17,看图的时候需要特别注意。

LRU君:
Tue Jul 22 21:36:39 PDT 2014 run size=32, clients=25 ; lrubc time=1200 缓存全部命中
Tue Jul 22 21:56:39 PDT 2014 run size=72, clients=25 ; lrubc time=1200 大量缓存命中
Tue Jul 22 22:16:40 PDT 2014 run size=144, clients=25 ; lrubc time=1200 少量缓存命中
Tue Jul 22 22:36:40 PDT 2014 run size=1000, clients=25 ; lrubc time=1200 缓存基本未命中
CBC君:
Tue Jul 22 23:02:16 PDT 2014 run size=32, clients=25 ; bucket time=1200 缓存全部命中
Tue Jul 22 23:22:16 PDT 2014 run size=72, clients=25 ; bucket time=1200 大量缓存命中
Tue Jul 22 23:42:17 PDT 2014 run size=144, clients=25 ; bucket time=1200 少量缓存命中
Wed Jul 23 00:02:17 PDT 2014 run size=1000, clients=25 ; bucket time=1200 缓存基本未命中

GC

GC指标是HBase运维最关心的指标,出现一次长时间的GC就会导致这段时间内业务方的所有读写请求失败,如果业务方没有很好的容错,就会出现丢数据的情况出现。根据下图可知,只有在‘缓存全部命中’的场景下,LRU君总GC时间25ms比CBC君的75ms短;其他三种场景下,LRU君表现都没有CBC君好,总GC时间基本均是CBC君的3倍左右。

Thoughput

吞吐量可能是所有HBase用户初次使用最关心的问题,这基本反映了HBase的读写性能。下图是随机读测试的吞吐量曲线,在‘缓存全部命中’以及‘大量缓存命中’这两种场景下,LRU君可谓是完胜CBC君,特别是在‘缓存全部命中’的场景下,LRU君的吞吐量甚至是CBC君的两倍;而在‘少量缓存命中’以及‘缓存基本未命中’这两种场景下,两者的表现基本相当;

Latency

读写延迟是另一个用户很关心的指标,下图表示在所有四种情况下LRU君和CBC君都在伯仲之间,LRU君略胜一筹。

IO

接下来两张图是资源使用图,运维同学可能会比较关心。从IO使用情况来看,两者在四种场景下也基本相同。

CPU

再来看看CPU使用情况,在‘缓存全部命中’以及‘大量缓存命中’这两种场景下,LRU君依然完胜CBC君,特别是在‘缓存全部命中’的场景下,CBC君差不多做了两倍于LRU君的工作;而在‘少量缓存命中’以及‘缓存基本未命中’这两种场景下,两者的表现基本相当;

结论

看完了所有比较重要的指标对比数据,我们可以得出以下两点:

1. 在’缓存全部命中’场景下,LRU君可谓完胜CBC君。因此如果总数据量相比JVM内存容量很小的时候,选择LRU君;

2. 在所有其他存在缓存未命中情况的场景下, LRU君的GC性能几乎只有CBC君的1/3,而吞吐量、读写延迟、IO、CPU等指标两者基本相当,因此建议选择CBC。

理论解释

之所以在’缓存全部命中’场景下LRU的各项指标完胜CBC,而在’缓存大量未命中’的场景下,LRU各项指标与CBC基本相当,是因为HBase在读取数据的时候,如果都缓存命中的话,对于CBC,需要将堆外内存先拷贝到JVM内,然后再返回给用户,流程比LRU君的堆内内存复杂,延迟就会更高。而如果大量缓存未命中,内存操作就会占比很小,延迟瓶颈主要在于IO,使得LRU和CBC两者各项指标基本相当。

本文转载自:http://hbasefly.com

原文链接

时间: 2024-12-10 16:47:12

HBase BlockCache系列 - 性能对比测试报告的相关文章

HBase BlockCache系列 - 探求BlockCache实现机制

HBase BlockCache系列第一篇文章<走进BlockCache>从全局视角对HBase中缓存.Memstore等作了简要概述,并重点介绍了几种BlockCache方案及其演进过程,对此还不了解的可以点这里.本文在上文的基础上深入BlockCache内部,对各种BlockCache方案具体工作原理进行详细分析.Note:因为SlabCache方案在0.98版本已经不被建议使用,因此本文不针对该方案进行讲解:至于LRU方案和Bucket方案,因为后者更加复杂,本文也会花更多篇幅详细介绍该

HBase BlockCache系列 – 走进BlockCache

和其他数据库一样,优化IO也是HBase提升性能的不二法宝,而提供缓存更是优化的重中之重.最理想的情况是,所有数据都能够缓存到内存,这样就不会有任何文件IO请求,读写性能必然会提升到极致.然而现实是残酷的,随着请求数据的不断增多,将数据全部缓存到内存显得不合实际.幸运的是,我们并不需要将所有数据都缓存起来,根据二八法则,80%的业务请求都集中在20%的热点数据上,因此将这部分数据缓存起就可以极大地提升系统性能. HBase在实现中提供了两种缓存结构:MemStore和BlockCache.其中M

HBase在单Column和多Column情况下批量Put的性能对比分析

针对HBase在单column family单column qualifier和单column family多column qualifier两种场景下,分别批量Put写入时的性能对比情况,下面是结合HBase的源码来简单分析解释这一现象. 1. 测试结果 在客户端批量写入时,单列族单列模式和单列族多列模式的TPS和RPC次数相差很大,以客户端10个线程,开启WAL的两种模式下的测试数据为例, 单列族单列模式下TPS能够达到12403.87,实际RPC次数为53次: 单列族多列模式下,TPS只有

lua、groovy嵌入到java中的性能对比(转)

lua和groovy都是可以嵌入到java中的脚本语言.lua以高性能著称,与C/C++在游戏开放中有较多使用,groovy是一个基于Java虚拟机(JVM)的敏捷动态语言,在jvm下有着不错的性能. groovy天生与java有着极高的兼容性,两者间对象无缝存取,支持jsr223.而lua是基于C的,需要调用jni,jni的性能是硬伤.这块网上基本都用luajava,好多年不更新了,不支持jsr223,而且很多方法都没有实现,也不能做到对象无缝存取,比如lua传到java的对象,java用不了

催化剂9.12新特性在Windows 7中的性能对比

在催化剂9.12驱动包中,我们终于看到了一次游戏性能提升,虽说不多但也聊胜于无.接下来就具体看看它和上个版本http://www.aliyun.com/zixun/aggregation/32995.html">在Windows 7里的性能对比. 催化剂9.12在新特性方面带来了对DirectCompute 10.1和OpenGL 3.2的支持,游戏性能提升则有:- 3DMark Vantage:在Radeon HD 5700/5800系列上整体性能提升最多9%,其中GT1 - Jane

佳能IXUS155性能和佳能60D性能对比详解

给各位摄影爱好者们来详细的解析分享一下佳能IXUS155性能和佳能60D性能的对比. 对比分享: 佳能IXUS155搭载了一枚两千万像素1/2.3英寸CCD传感器,是佳能卡片机中首款达到两千万像素的相机,也打破了仅有索尼使用两千万像素级别传感器的垄断,也让卡片相机逐步走进两千万时代,所以可以看出佳能对这款卡片机给予了非常大的期望. 而佳能60D采用了一块有效像素为1800万的APS-C传感器,高感光度下的画质表现不错,搭配DIGIC 4代影像处理.   佳能IXUS155使用了一枚10倍光学变焦

四种整数数据类型的性能对比

数据|数据类型|性能 在我们写VBA程序的时候,我们经常要面对数据类型定义的选择,有的情况下,业务本身对于数据类型有要求和限制,那么我们并不难以选择,有些时候却没有限制,我们可以任意选用四种整数类型(Byte,Integer,Long,Currency)中的一种,例如: For i=1 to 100 在这行代码中,我们该把变量i定义为什么类型的变量呢?显然四种整数类型都可以正常运行,但是他们的效率是否相同呢?我们到底该如何选择?有的人说,当时是选最小的数据类型Byte,有的人说在32位系统上,3

Hadoop虚拟化的性能对比和调优经验

虚拟化为Hadoop注入了前所未有的活力,从IT生产管理的角度,表现为以下几点: ·Hadoop和其他消耗不同类型资源的应用一起部署共享数据中心可以提高总体资源利用率: ·灵活的虚拟机操作使得用户可以动态的根据数据中心资源创建.扩展自己的Hadoop集群,也可以缩小当前集群.释放资源支持其他应用如果需要: ·通过与虚拟化架构提供的HA.FT集成,避免了传统Hadoop集群中的单点失败,再加之Hadoop本身的数据可靠性,为企业大数据应用提供了可靠保证. 基于这些原因,vSphere Big Da

Windows 7和Windows Vista处理器、内存性能对比

Windows 7和Windows Vista的性能对比评测很多,但大多都是关于3D游戏的,不过玩游戏毕竟不是长久之计,所以今天我们再看看另外两个更基本的方面:处理器和内存性能. 测试平台配置: 处理器:Core i7-920 OC 4GHz (200MHz×20) 散热器:Noctua NH-U12P 主板:技嘉GA-EX58-UD5 显卡:技嘉GeForce GTX 285 内存:OCZ Blade PC-16000 DDR3 2GB×3 (7-8-7-20) 硬盘:西部数据VelicoRa