码迷,mamicode.com
首页 > 其他好文 > 详细

hbase 杂说

时间:2015-08-14 19:47:15      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:

    最近在看hbase,我们来看看官方给出一些建议:(其实官方很多都是只给建议,却并没有说为什么,对于这样的情况只能自己去做实验或者是工作中碰到去解决吧)

    1、regionServer上region的个数:官方给出的建议是20-200个region,但是下面又说

    如何粗略计算regionServer上region:有个公式,
    

HBase 0.98.x
((RS Xmx) * hbase.regionserver.global.memstore.size) / (hbase.hregion.memstore.flush.size * (# column families))+
HBase 0.94.x
((RS Xmx) * hbase.regionserver.global.memstore.upperLimit) / (hbase.hregion.memstore.flush.size * (# column families))+
    貌似hbase.regionserver.global.memstore.size和 hbase.regionserver.global.memstore.upperLimit默认值都是0.4,也就是说如果我RS的内存分配16G,其他都是默认值,只有一个列族,0.98版本的一个region个数有51个,为什么这么计算?其实这是一种极限情况,hbase.regionserver.global.memstore.upperLimit其实这个参数的作用是防止内存占用过大,当ReigonServer内所有region的memstores所占用内存总和达到heap的40%时,HBase会强制block所有的更新并flush这些region以释放所有memstore占用的内存。这个公式是假设memstore达到最大值了,为了不发生上面的情况。 同upperLimit,只不过lowerLimit在所有region的memstores所占用内存达到Heap的35%时,不flush所有的memstore。它会找一个memstore内存占用最大的region,做个别flush,此时写更新还是会被block。lowerLimit算是一个在所有region强制flush导致性能降低前的补救措施。在日志中,表现为 “** Flush thread woke up with memory above low water.”

    参数调整会影响读写,如果写的压力大导致经常超过这个阀值,则调小读缓存hfile.block.cache.size增大该阀值,或者Heap余量较多时,不修改读缓存大小。
如果在高压情况下,也没超过这个阀值,那么建议你适当调小这个阀值再做压测,确保触发次数不要太多,然后还有较多Heap余量的时候,调大hfile.block.cache.size提高读性能
    参数调整会影响读写,(以下是经验之谈吧)如果写的压力大导致经常超过这个阀值,则调小读缓存hfile.block.cache.size,增大该阀值,或者Heap余量较多时,不修改读缓存大小。

    如果在高压情况下,也没超过这个阀值,那么建议你适当调小这个阀值再做压测,确保触发次数不要太多,然后还有较多Heap余量的时候,调大hfile.block.cache.size提高读性能
    hfile.block.cache.size表示storefile的读缓存占用Heap的大小百分比,0.2表示20%。该值直接影响数据读的性能。hbase.regionserver.global.memstore.upperLimit和这个参数一个影响写,一个影响读,如果两值加起来超过80-90%,会有OOM的风险

    2、Maximum region size
    官方推荐maximum region size is 10-20Gb,5-10Gb is optimal.
    0.98版本后加入了一些优化机制,可以使得region size 更大


hbase 杂说

标签:

原文地址:http://my.oschina.net/u/1378204/blog/492529

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!