2.1 HBase HRegion 最大化压缩
hbase.hregion.majorcompaction:所有 HStore-
Files“最大化”压缩之间的时间,要禁用自动的最大化压缩,请将此值设置为 0。

2.2 RegionServer 小型压缩线程计数
hbase.regionserver.thread.compaction.small:
regionserver做Minor Compaction时线程池里线程数目,可以设置为5

2.3 HBase Region 分割限制
hbase.regionserver.regionSplitLimit:控制最大的region数量,超过则不可以进行split操作,默认是2147483647,设置1可以禁止自动的split,通过人工, 或者写脚本在集群空闲时执行。

2.4 HBase 文件最大大小
hbase.hregion.max.filesize:默认是10G, 如果任何一个column familiy里的StoreFile超过这个值, 那么这个Region会一分为二,因为region分 裂会有短暂的region下线时间(通常在5s以内),为减少对业务端的影响,建议手动定时分裂,可以设置大些。

2.5 HBase 客户端写入缓冲
hbase.client.write.buffer:客户端写buffer,设置autoFlush为false时,当客户端写满buffer才flush 默认为2M,写缓存大小,推荐设置为5M,单位是字节,当然越大占用的内存越多。

2.6 HBase Region Server 处理程序计数
hbase.regionserver.handler.count:该设置决定了处理RPC的线程数量,默认值是30,通常可以调大,但不是越大越好,设置过大会占用过多的内存, 导致频繁的gc,或者出现oom。

2.7 HFile 块缓存大小
hfile.block.cache.size:默认值0.25,regionser-
ver的block cache的内存大小限制,在偏向读的业务中,可以适当调大该值,需要注意的是 hbase.regionserver.global.memstore.upperLimit的值和hfile.block.cache.size的值之和必须小于0.8。

2.8 RegionServer 中所有 Memstore 的最大大小
hbase.regionserver.global.memstore.upperLimit,hbase.regionserver.global.memstore.size:默认值0.4 这个参数的作用是防止内存占用过大,当ReigonServer内所有region的memstores所占用内存总和达到heap的 40%时,HBase会强制block所有的更新并flush这些region以释放所有memstore占用的内存。
2.9 Memstore 刷新的低水位线
hbase.regionserver.global.memstore.lowerLimit,hbase.regionserver.global.memstore.size.lower.limit:默认值0.35 同upperLimit,只不过lowerLimit在所有region的memstores所占用内存达到Heap的35%时,不flush所有的 memstore。它会找一个memstore内存占用最大的region,做个别flush,此时写更新还是会被block。lowerLimit 算是一个在所有region强制flush导致性能降低前的补救措施。在日志中,表现为 “** Flush thread woke up with memory above low water
2.10 HBase Memstore 刷新大小
hbase.hregion.memstore.flush.size:如 memst-
ore 大小超过此值(字节数),Memstore 将刷新到磁盘。这个参数的作用是当单个Region内所有的 memstore大小总和超过指定值时,flush该region的所有memstore。RegionServer的flush是通过将请求添加一个 队列,模拟生产消费模式来异步处理的。那这里就有一个问题,当队列来不及消费,产生大量积压请求时,可能会导致内存陡增,最坏的情况是触发OOM。
