HBase 参数设置


前言

转载 https://lihuimintu.github.io/2019/08/15/HBase-tuning/


一、GC

HBase CMS GC 配置参考

二、RS 参数

hbase.server.thread.wakefrequency

该值默认是 10 秒,它影响着 Flush 和 Compaction

FlushHandler 从队列 flushQueue 取出需要刷新的请求,从队列里取请求超时时间是该参数

Compaction 后台定期线程检查也是该参数

三、BlockCache

hfile.block.cache.size
表示 BlockCache 占 hbase_heapsize 比例,参数默认 0.4
一个 RS 上有一个 BlockCache 和多个 MemStore,它们的大小之和建议小于 heapsize * 0.8,
否则 HBase 可能不能启动,因为仍然要留有一些内存保证其它任务的执行。

四、flush 参数

hbase.regionserver.global.memstore.size
对应旧参数hbase.regionserver.global.memstore.upperLimit
表示 RS 全局 MemStore 占 hbase_heapsize 最大占比,参数默认 0.4
一个 RS 上有一个 BlockCache 和N个 MemStore,它们的大小之和建议小于 heapsize * 0.8,
否则 HBase 可能不能启动,因为仍然要留有一些内存保证其它任务的执行。

hbase.hregion.memstore.block.multiplier

写请求达到 HRegion 后,HRegion 首先会加行锁,然后进行 checkResource 操作,在 checkResource 操作里主要检查 memstoreSize 是否大于 blockingMemStoreSize,其中 blockingMemStoreSize 由等于 memstoreFlushSize *
hbase.hregion.memstore.block.multiplier,该参数默认值是 4

hbase.hregion.memstore.block.multiplier 设置的太大在写入量大的时候很可能会导致机器内存耗尽而引发 OutofMem 错误

hbase.hregion.memstore.flush.size

上文提到的 memstoreFlushSize 大小由参数 hbase.hregion.memstore.flush.size 指定,该值默认值是 128M

hbase.hstore.flusher.count

MemStoreFlusher 的职责是接受 HRegion 的刷新请求并调度该请求,在 MemStoreFlusher 内部有一个 flushQueue 队列,消费此队列的是 FlushHandler,FlushHandler 的个数由参数 hbase.hstore.flusher.count 设定, 默认值是 2

如果线程个数较少,MemStore 刷新将排队。对于更多的线程个数,刷新将并行执行,从而增加 HDFS 负载。这也会导致更多的 compact。

hbase.hstore.blockingStoreFiles

在HFile的数量过多的时候会限制写请求的速度,如果过多就会阻塞 flush 而进行 compact 操作并阻塞一定时间后才进行 flush 操作

阻塞文件参数由参数 hbase.hstore.blockingStoreFiles 控制该值默认为 7,阻塞时间由参数 hbase.hstore.blockingWaitTime 控制,该值默认为 90000 毫秒

hbase.hstore.blockingWaitTime

值默认为 90000 毫秒,上文有提参数作用

五、Split 参数

hbase.regionserver.region.split.policy

HBase 的分裂策略可以通过表的属性 SPLIT_POLICY 指定,也可以通过 hbase-site.xml 全局指派,参数为 hbase.regionserver.region.split.policy,默认为IncreasingToUpperBoundRegionSplitPolicy。

hbase.regionserver.thread.split

执行 split 的线程数,默认为 1

hbase.regionserver.regionSplitLimit

当前 regionserver 的 region 个数最大值,如果当前 regionserver 的 region 个数超过该值,那么将不会在进行 split 操作。默认值 1000

Compaction 参数
Compaction 的主要目的

将多个HFile 合并为较大HFile,从而提高查询性能
减少HFile 数量,减少小文件对 HDFS 影响
提高 Region 初始化速度

hbase.hstore.compaction.min

当某个列族下的 HFile 文件数量超过这个值,则会触发 minor compaction 操作 默认是3,比较小,建议设置 10-15
设置过小会导致合并文件太频繁,特别是频繁 bulkload 或者数据量比较大的情况下 设置过大又会导致一个列族下面的 HFile 数量比较多,影响查询效率

hbase.hstore.compaction.max

一次最多可以合并多少个HFile,默认为 10 限制某个列族下面选择最多可选择多少个文件来进行合并
注意需要满足条件hbase.hstore.compaction.max > hbase.hstore.compaction.min

hbase.hstore.compaction.max.size

默认 Long 最大值,minor_compact 时 HFile 大小超过这个值则不会被选中合并
用来限制防止过大的 HFile 被选中合并,减少写放大以及提高合并速度

hbase.hstore.compaction.min.size

默认 memstore 大小,minor_compact 时 HFile 小于这个值,则一定会被选中
可用来优化尽量多的选择合并小的文件

hbase.regionserver.thread.compaction.small

默认1,每个RS的 minor compaction线程数,其实不是很准确,这个线程主要是看参与合并的 HFile 数据量 有可能 minor compaction 数据量较大会使用 compaction.large 提高线程可提高 HFile 合并效率

hbase.regionserver.thread.compaction.large

默认1,每个RS的 major compaction线程数,其实不是很准确,这个线程主要是看参与合并的 HFile 数据量 有可能 minor compaction 数据量较大会使用 compaction.large 提高线程可提高 HFile 合并效率

hbase.hregion.majorcompaction

默认604800000, 单位是毫秒,即7天。major compaction 间隔

设置为0即关闭hbase major compaction,改为业务低谷手动执行。HBase 自动大合并脚本

hbase.hregion.majorcompaction.jetter

Major compaction 抖动参数,默认值0.5。这个参数是为了避免major compaction同时在各个regionserver上同时发生,避免此操作给集群带来很大压力。 这样节点major compaction就会在 + 或 - 两者乘积的时间范围内随机发生。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值