HBase随机写以及随机读性能测试

标签: NoSQL HBase HBase Benchmark HBase性能 HBase读写性能影响因素 | 发表时间:2011-08-14 22:36 | 作者:bluedavy d0ngd0ng
出处:http://blog.bluedavy.com

根据最近生产环境使用的经验,更多的项目的采用,以及采用了更加自动的测试平台,对HBase做了更多的场景的测试,在这篇blog中来分享下纯粹的随机写和随机读的性能数据,同时也分享下我们调整过后的参数。

测试环境说明:
1、Region Server: 5台,12块1T SATA盘(7200 RPM),No Raid,物理内存24G,CPU型号为E5620;
启动参数为:-Xms16g -Xmx16g -Xmn2g -XX:SurvivorRatio=2 -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=85
2、Data Node:35台,和Region Server同样的硬件配置,启动参数上-Xms2g -Xmx2g,未设置-Xmn;

服务端参数:
hbase.replication false
hbase.balancer.period 1200000
hfile.block.cache.size 0.4,随机读20%命中场景使用0.01
hbase.regionserver.global.memstore.upperLimit 0.35
hbase.hregion.memstore.block.multiplier 8
hbase.server.thread.wakefrequency 100
hbase.regionserver.handler.count 300
hbase.master.distributed.log.splitting false
hbase.regionserver.hlog.splitlog.writer.threads 3
hbase.hregion.max.filesize 1073741824
hbase.hstore.blockingStoreFiles 20
hbase.hregion.memstore.flush.size 134217728

客户端参数:
hbase.client.retries.number 11
hbase.client.pause 20
hbase.ipc.client.tcpnodelay true
ipc.ping.interval 3000

最终随机写的测试性能结果如下(点开可看大图):

从写的测试来看,可以看到,当客户端线程数在250左右时,此时的响应时间在6ms左右,tps在7.5k左右,差不多是比较好的一个状态。
在随机写的测试中,以及我们的一些项目的测试中,看到的一些现象和问题:
1、随着单台机器的region数变多了,tps下降的比较明显,team的同事做了一个改进,保障了随着region数的增多,tps基本不会有太多的下降,具体请见同事的这篇blog
2、当hbase.regionserver.handler.count为100(默认为10,更正常了)时,压力大的情况下差不多100个线程都会BLOCKED,增加到300后差不多足够了,此时tps也到达瓶颈了;
3、当datanode数量比较少时,会导致写tps比较低,原因是此时compact会消耗掉太多的网络IO;
4、当写采用gz压缩时,会造成堆外内存泄露,具体请参见同事的这篇blog
5、在压力增大、region数增多的情况下,split和flush会对写的平稳性造成比较大的影响,而通常内存是够用的,因此可以调整split file size和memstore flush size,这个要根据场景来决定是否可调整。
对写的速度影响比较大的因素主要是:请求次数的分布均衡、是否出现Blocking Update或Delaying flush、HLog数量、DataNode数量、Split File Size。

随机读的测试性能结果如下(点开可看大图):

从读的测试来看,可以看到,读的tps随cache命中率降低会下降的比较厉害,命中率为90%时、客户端线程数为250时,此时的响应时间和tps是比较不错的状况。
在随机读的测试中,以及我们的一些项目的测试中,看到的一些现象和问题:
1、随机读的tps随着命中率下降,下降的有点太快,具体原因还在查找和分析中;
2、当命中率很低时,读bloomfilter的索引信息需要耗费掉比较多的时间,主要原因是bloomfilter的索引信息并没有在cache优先级中占优,这是一个可以改进的点。
对读的速度影响比较大的因素主要是:请求次数的分布均衡、StoreFile数量、BloomFilter是否打开、Cache大小以及命中率。

ps: 强烈推荐同事的blog,其中记录了很多我们对HBase的改进,以及我们在运维HBase项目时碰到的各种奇怪、诡异的问题。

相关 [hbase 随机 随机] 推荐:

HBase随机读写性能测试

- jiaosq - NoSQLFan
本文转载自淘宝网BlueDavy同学的博客,文章基于淘宝对HBase的大量应用,给出了一个HBase的随机读写性能测试结果,对测试环境、配置及性能参数分析都有较详细的描述,推荐给各位NoSQL Fans. 根据最近生产环境使用的经验,更多的项目的采用,以及采用了更加自动的测试平台,对HBase做了更多的场景的测试,在这篇blog中来分享下纯粹的随机写和随机读的性能数据,同时也分享下我们调整过后的参数.

HBase随机写以及随机读性能测试

- d0ngd0ng - BlueDavy之技术blog
根据最近生产环境使用的经验,更多的项目的采用,以及采用了更加自动的测试平台,对HBase做了更多的场景的测试,在这篇blog中来分享下纯粹的随机写和随机读的性能数据,同时也分享下我们调整过后的参数. 1、Region Server: 5台,12块1T SATA盘(7200 RPM),No Raid,物理内存24G,CPU型号为E5620;.

伪随机和真随机

- AWard - LinuxTOY
相信每个计算机相关专业的人都理解伪随机和真随机的差别,那么它们到底“看起来”有什么差别呢. 下面是来自 Random.org 的随机数位图:. 下面是在 Windows 系统上调用 PHP 的 rand() 方法生成的:. 同样这段代码在 Linux 系统上运行时并没有出现这样的规律,换用 Mersenne Twister 的 mt_rand() 方法也没有这样的规律.

随机数原理

- - 崔永键的博客
.Net 创建随机数常用的方法:. C/C++中创建随机数的方法:. 以上随机数的生成原理,基本上是下面这种思路:. 比如,我使用线性同余法来自己生成随机数.      int next = (seed * 29 + 37) % 1000;  //线性同余法. 线性同余法:第n+1个数=(第n个数*29+37) % 1000.

JMeter随机对某一网点进行随机压力测试

- - 互联网 - ITeye博客
        Apache JMeter是Apache组织开发的基于Java的压力测试工具. 用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域. 它可以用于测试静态和动态资源例如静态文件、Java小服务程序、CGI脚本、Java 对象、数据库, FTP服务器, 等等. JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来在不同压力类别下测试它们的强度和分析整体性能.

SSD的随机写一定很慢吗?

- crystal - 风轻扬
对SSD一种常见的认识是随机读、顺序读、顺序写都很快,但随机写很慢. 从很多目前公布的产品性能指标数据和测试结果看,确实如此. 一般SSD小块随机读性能可以达到几万甚至过十万,但小块随机写性能则一般只有3-5千,相差一个数量级. SSD是一个很复杂的硬件,也还在不断改进,各代产品的性能表现往往有很大差异,针对不同的IO操作模式,SSD的性能表现可能有非常大的差异,它的性能表现决不能用“三快一慢”来简单的描述.

趣题:随机折断的木棒

- Wang - FeedzShare
来自: Matrix67: My Blog - FeedzShare  . 发布时间:2011年02月06日,  已有 3 人推荐. 随机在中间选取一点,把这根木棒折断. 那么,短的那一截木棒平均有多长. 随机在中间选取一点,把这根木棒折断. 那么,长的那一截木棒平均有多长. 随机在中间选取一点,把这根木棒折断.

iPod产品中的随机谬误?

- stingzou - iHuby
前两天看到一篇Blog讲“如何避免思维的误区”,其中有一部分是讲“随机谬误模型”,并举了Apple的iPod播放器产品为例:. Ipod除了绚丽的外观,还有一项领先的功能,就是“真正的随机播放功能”. Apple通过完全随机的算法,向用户即时运算出下一首随机播放的歌曲. 但是不久Apple就接到了客户的投诉,投诉的内容是Apple所谓随机播放功能有问题,理由是它有时会连续播放同一首歌.

Java随机数使用实例总结

- - ITeye博客
Java中提供了好几个类,可以让我们方便的实现随机数等功能,这些类有 java.util.Random, java.util.UUID 以及JDK 7 新引入的 java.util.concurrent.ThreadLocalRandom等. 本文将通过这些类对平时使用的实例进行简单的总结,这些实例的功能大致可以分成四个方面:.

oracle sql 随机读取N条数据

- - 数据库 - ITeye博客
关键字:order by dbms_random.value. 以下是几个不同的数据库随机取数据的sql. NewID()函数将创建一个 uniqueidentifier 类型的唯一值. 1)dbms_random包. 注:dbms_random包需要手工安装,位于$ORACLE_HOME/rdbms/admin/dbmsrand.sql .