您的当前位置:首页正文

HBase的RegionServer参数配置

2022-09-18 来源:榕意旅游网
HBase的RegionServer参数配置

hbase.hregion.max.filesize

默认值:256M

说明:在当前ReigonServer上单个Reigon的最⼤存储空间,单个Region超过该值时,这个Region会被⾃动split成更⼩的region。调优:

⼩region对split和compaction友好,因为拆分region或compact⼩region⾥的storefile速度很快,内存占⽤低。缺点是split和compaction会很频繁。特别是数量较多的⼩region不停地split, compaction,会导致集群响应时间波动很⼤,region数量太多不仅给管理上带来⿇烦,甚⾄会引发⼀些Hbase的bug。

⼀般512以下的都算⼩region。

⼤region,则不太适合经常split和compaction,因为做⼀次compact和split会产⽣较长时间的停顿,对应⽤的读写性能冲击⾮常⼤。此外,⼤region意味着较⼤的storefile,compaction时对内存也是⼀个挑战。

当然,⼤region也有其⽤武之地。如果你的应⽤场景中,某个时间点的访问量较低,那么在此时做compact和split,既能顺利完成split和compaction,⼜能保证绝⼤多数时间平稳的读写性能。

既然split和compaction如此影响性能,有没有办法去掉?compaction是⽆法避免的,split倒是可以从⾃动调整为⼿动。

只要通过将这个参数值调⼤到某个很难达到的值,⽐如100G,就可以间接禁⽤⾃动split(RegionServer不会对未到达100G的region做split)。再配合这个⼯具,在需要split时,⼿动split。

⼿动split在灵活性和稳定性上⽐起⾃动split要⾼很多,相反,管理成本增加不多,⽐较推荐online实时系统使⽤。

内存⽅⾯,⼩region在设置memstore的⼤⼩值上⽐较灵活,⼤region则过⼤过⼩都不⾏,过⼤会导致flush时app的IO wait增⾼,过⼩则因store file过多影响读性能。

hbase.regionserver.global.memstore.upperLimit/lowerLimit默认值:0.4/0.35

upperlimit说明:hbase.hregion.memstore.flush.size 这个参数的作⽤是当单个Region内所有的memstore⼤⼩总和超过指定值时,flush该region的所有memstore。RegionServer的flush是通过将请求添加⼀个队列,模拟⽣产消费模式来异步处理的。那这⾥就有⼀个问题,当队列来不及消费,产⽣⼤量积压请求时,可能会导致内存陡增,最坏的情况是触发OOM。

这个参数的作⽤是防⽌内存占⽤过⼤,当ReigonServer内所有region的memstores所占⽤内存总和达到heap的40%时,HBase会强制block所有的更新并flush这些region以释放所有memstore占⽤的内存。

lowerLimit说明: 同upperLimit,只不过lowerLimit在所有region的memstores所占⽤内存达到Heap的35%时,不flush所有的memstore。它会找⼀个memstore内存占⽤最⼤的region,做个别flush,此时写更新还是会被block。lowerLimit算是⼀个在所有region强制flush导致性能降低前的补救措施。在⽇志中,表现为 “** Flush thread woke up with memory above low water.”调优:这是⼀个Heap内存保护参数,默认值已经能适⽤⼤多数场景。

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

还有⼀种可能性是?hbase.hregion.memstore.flush.size保持不变,但RS维护了过多的region,要知道 region数量直接影响占⽤内存的⼤⼩。

hbase.hstore.blockingStoreFiles默认值:7

说明:在flush时,当⼀个region中的Store(Coulmn Family)内有超过7个storefile时,则block所有的写请求进⾏compaction,以减少storefile数量。调优:block写请求会严重影响当前regionServer的响应时间,但过多的storefile也会影响读性能。从实际应⽤来看,为了获取较平滑的响应时间,可将值设为⽆限⼤。如果能容忍响应时间出现较⼤的波峰波⾕,那么默认或根据⾃⾝场景调整即可。

hbase.hregion.memstore.block.multiplier

默认值:2

说明:当⼀个region⾥的memstore占⽤内存⼤⼩超过hbase.hregion.memstore.flush.size两倍的⼤⼩时,block该region的所有请求,进⾏flush,释放内存。

虽然我们设置了region所占⽤的memstores总内存⼤⼩,⽐如64M,但想象⼀下,在最后63.9M的时候,我Put了⼀个200M的数据,此时memstore的⼤⼩会瞬间暴涨到超过预期的hbase.hregion.memstore.flush.size的⼏倍。这个参数的作⽤是当memstore的⼤⼩增⾄超过hbase.hregion.memstore.flush.size 2倍时,block所有请求,遏制风险进⼀步扩⼤。

调优: 这个参数的默认值还是⽐较靠谱的。如果你预估你的正常应⽤场景(不包括异常)不会出现突发写或写的量可控,那么保持默认值即可。如果正常情况下,你的写请求量就会经常暴长到正常的⼏倍,那么你应该调⼤这个倍数并调整其他参数值,⽐如hfile.block.cache.size和hbase.regionserver.global.memstore.upperLimit/lowerLimit,以预留更多内存,防⽌HBase server OOM。

因篇幅问题不能全部显示,请点此查看更多更全内容