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 performanceEvaluation來做讀寫測試。

具體腳本如下

#首先寫入一億數據。
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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章