海量数据下HBase的读性能

这段时间刚做完一个hbase项目,存储千亿规模的数据,12台dell,5小时完成扫库。

这里主要是对hbase的数据本地化机制作了优化,本文不对细节作描述。

在后期使用的过程中,使用方发现hbase的随机读性能出现了较大的下降,经常出现单个GET请求花费3-5秒的现象。这个事情困扰了我很久,因为从我的实验环境上是不可复现的。

实验环境和线上环境的主要区别是数据量和写压力:

实验环境百亿规模的数据,线上是千亿

实验环境基本上没有写压力,而线上随时有较大的写压力。

关于原因做了很多猜测,但是后来都被实验否定了,比如以为hdfs的性能不够,以为MetaRegion的性能问题等等。

经过一段时间的跟踪,终于发现问题出现在BloomFilter上,hbase的bloomfilter是惰性加载的,在写压力比较大的情况下,会有不停的compact并产生storefile,那么新的storefile是不会马上将bloomfilter加载到内存的,等到读请求来的时候才加载。

这样问题就来了,第一,我们的storefile设置的比较大,maxsize为2G,这会导致bloomfilter也比较大;第二,系统的读写压力都比较大。两个因素加起来,就导致了前边所说的问题。

解决办法:

1)去掉bloomfilter,我们的数据太大了,这个东西的好处看起来还不如不加好,瞬间就能搞定。

2)将bloomfilter改成激进的方式加载,这个要安排下,恩。

相关推荐