设为首页 加入收藏

TOP

Hbase offHeap(堆外内存)测试
2019-02-12 13:39:04 】 浏览:34
Tags:Hbase offHeap 内存 测试

Hbase offHeap(堆外内存)测试

blockcache是hbase中的读缓存,其主要组成包括LruCache和bucketCache,LruCache使用堆内内存,BucketCache使用堆外内存。本文是想对比hbase只用堆内内存作为读缓存(即只用LruCache)以及尝试配置BucketCache。以观察是否可以来减少GC,提高集群性能。

一、配置

使用两台同等规格的服务器,简称为主机A和主机B.

hbase使用堆内存总量均为8000M。

主机A为不配置堆外内存的主机,只使用0.39*8000=3120M堆内内存。相关参数为

<property>
<name>hfile.block.cache.size</name>
<value>0.39</value>
</property>

主机B配置了堆外内存和堆内内存,堆内内存为0.1*8000=800M,堆外内存为3172M,由于使用双重缓存后只有indexblock和bloomblock会存在堆内,datablock都会存在堆外,这一配置基本合理且总读缓存大小和主机A相差不大。由于设置相关参数为

<property>
<name>hbase.bucketcache.ioengine</name>
<value>offheap</value>
</property>
<property>
<name>hfile.block.cache.size</name>
<value>0.1</value>
</property>
<property>
<name>hbase.bucketcache.size</name>
<value>3172</value>
</property>
HBASE_OFFHEAPSIZE = 4G

二、测试方式。

主要观察点是读时间和GC情况。

使用hbase自带的性能评估工具HBase performanceeva luation来做读写测试。

具体脚本如下

#首先写入一亿数据。
hbase pe --rows=100000000 --nomapred sequentialWrite 1 >> newTest.log 2>&1
#flush成hfile
echo "flush '"TestTable"'" | hbase shell
#重启hbase将gc数量归零
dbserver.sh restart_server_all hbase  >> newTest.log 2>&1
sleep 60s
#读取数据1000W数据10次
for((i=0;i<=10;i++)); do
    hbase pe --rows=10000000 --nomapred randomRead 1 >>newTest.log 2>&1
done
sleep 600s
#读取100W数据重复100次
for((i=0;i<=100;i++)); do
    hbase pe --rows=1000000 --nomapred sequentialWrite 1 >> newTest.log 2>&1
    hbase pe --rows=1000000 --nomapred randomRead 1 >> newTest.log 2>&1
done
#最后打印gc情况
jstat -gcutil `jps |grep HRegion|awk '{print $1}'` >> newTest.log 2>&1

三.测试结果比较

1、 所有读取总时间比较

采集了读取时间的信息,发现总体来讲A、B不存在明显的读性能差异。

2、gc情况比较

测试完成后观察两个机器的GC情况,发现使用堆外内存的相比未使用的,YGC还是FGC次数都相当,总的GC时间
缩短,主要体现在YGC时间缩短约20s。YGC时间减少是由于存放在堆内内存的block减少.

3、BlockCache使用情况

hbase-root-regionserver-node1.log日志会每五分钟打印一次目前BlockCache使用情况,观察A、B在读取数据阶
段(09/07 18:30- -09/08 8:50)的BlockCache。
主机A只使用堆内内存(LruCache),初始化blockcache如下:

在读取过程中基本保持着固定的缓存(1020.01MB)

主机B使用堆外内存和堆内内存组合的CombinedCache,初始化BlockCache如下:

在读取过程中基本保持着固定的缓存,其中堆内内存使用量极少,因为DataBlock大部分在堆外存储
(1008.39MB)

4、其他的情况说明

之前通过调用thrift读接口的方式进行测试,但发现BlockCache占用不明显,因此改用HBase PE来测试。自写的程
序效果不明显的主要原因是DBE中HBase有10W的最大读取量,且offset总是从0开始,除非是非常长时间的读取,
否则10W读取量只占很少的BlockCahce。HBase PE虽然也是offset从0开始,但是没有对于读取量的限制,一次性
读取尽量多的数据,BlockCache的占用就可以明显的看出。

四. 总结

配置了堆外内存的机器和未配置的相比:
1、读性能接近,没有明显区别。
2、使用上述测试用例,YGC次数和FGC次数差别不大,但是YGC的时间从29s降为9s,有20s的缩短


作者:蛋挞

日期:2018.12.12


编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇HBase的javaApi一个应用(创建删.. 下一篇HBase入门篇3-hbase 配置文件参数..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(214) }