海量数据下HBase的读性能

这段时间刚做完一个hbase项目,存储千亿规模的数据,12台dell,5小时完成扫库。
这里主要是对hbase的数据本地化机制作了优化,本文不对细节作描述。
在后期使用的过程中,使用方发现hbase的随机读性能出现了较大的下降,经常出现单个 GET请求花费3-5秒的现象。这个事情困扰了我很久,因为从我的实验环境上是不可复现的。

实验环境和线上环境的主要区别是数据量和写压力:
实验环境百亿规模的数据,线上是千亿
实验环境基本上没有写压力,而线上随时有较大的写压力。

关于原因做了很多猜测,但是后来都被实验否定了,比如以为hdfs的性能不够,以为Meta Region的性能问题等等。
经过一段时间的跟踪,终于发现问题出现在Bloom Filter上,hbase的bloom filter是惰性加载的,在写压力比较大的情况下,会有不停的compact并产生storefile,那么新的storefile是不会马上将bloom filter加载到内存的,等到读请求来的时候才加载。
这样问题就来了,第一,我们的storefile设置的比较大,max size为2G,这会导致bloom filter也比较大;第二,系统的读写压力都比较大。两个因素加起来,就导致了前边所说的问题。

解决办法:
1)去掉 bloomfilter,我们的数据太大了,这个东西的好处看起来还不如不加好,瞬间就能搞定。
2)将bloomfilter改成激进的方式加载,这个要安排下,恩。

猜你喜欢

转载自redisliu.iteye.com/blog/1139932