配置:
hbase.hregion.memstore.flush.size: 134217728
当Region的所有的memstore(意思是所有HStore的memstore的size的加总)的size超过参数设定的字节数时, 就会引发flush to disk的这个操作. 其中监听这个value是有另外一条线程在做.
hbase.hregion.percolumnfamilyflush.size.lower.bound: 16777216
当使用了FlushLargeStoresPolicy的时候, 这个参数才会起效. 意思是当Region的memstore的limit被达到的时候. 我们会找到这个Region中所有HStore中的memstore超过这个值的. 然后这些超过值的将会被flush. 其它小于这个值的不会被flush. 如果没有任何HStore的memstore超过这个值的话, 那么所有memstore都将会被flush(更默认的行为一致). 这个值的设定应该小于总memstore值的一半.
hbase.hregion.preclose.flush.size: 5242880
当要将一个region关闭的时候, 如果此时region中总memstore的size大于等于这个设定时, region会运行一个pre-flush的操作. 完成后再进行region的关闭. 这个flush会在region的close的flag下执行, 这个时间不再接受任何写操作. 如果memstore的内容比较大的话, 会花费相当的时间.
hbase.hregion.memstore.block.multiplier: 4
如果region的memstore的字节数超过这个参数乘以hbase.hregion.memstore.flush.size的字节数, 更新会被阻塞. 这个参数在写入非常繁忙的时候非常有用, 相当于确定了了一个上界. 可以防止OOME或者compaction的时间过长或者split的时间过长.
hbase.hregion.memstore.mslab.enabled: true
mslab的全称是MemStore-Local Allocation Buffer. 这是一个用来防止堆内存过于零散碎片从而导致频繁调用gc的class. 这种情况特别容易发生在重写下. 默认情况是enable.
hbase.hregion.max.filesize: 10737418240
一个region拥有的最大HFile的size. 超过这个值的region将会被split成两半.
hbase.hregion.majorcompaction: 604800000
两个major compaction的间隔的时间, 单位毫秒. 0表示关闭到达时间就自动进行major compaction的这个行为. 可以通过用户请求或者size满足这两个方面触发major compaction. 默认值是7天进行一次major compaction. 如果major compaction对程序运行有什么阻碍的话, 可以将major compaction的时间设定在非高峰时间. 或者关了时间触发, 改为人为触发或者size触发等其他触发机制. 这个参数乘以hbase.hregion.majorcompaction.jitter会导致在默认的间隔时间(7天)内随机的发生major compaction
hbase.hregion.majorcompaction.jitter: 0.50
这个参数配合上面的那个参数使用. 数字设置得越小, 就会越接近默认的major compaction时间. 意思就是major compaction发生的时间不一定是7天, 反正就是一定会发生在7天中的某一个随机时间, 这个时间的随机性由这个数字来决定.