现在的位置: 首页 > 综合 > 正文

HBase在split和major compact的一些非通常情况下的触发条件

2013年08月01日 ⁄ 综合 ⁄ 共 873字 ⁄ 字号 评论关闭

HBase中的major compact功能中,参数hbase.hregion.majorcompaction已经设为0了,
日志中发现还是会major compact。
有3种方式,可以激发major compact
1) 通过hbase shell命令 major_compact进行触发
2) compact when file <= sum(smaller_files) *
'hbase.hstore.compaction.ratio'
    这种情况是选中的文件数量等于store中的文件数量时,会有minor compact升级为major compact
3) major compact时间间隔到期: after (now - min(StoreFile.timestamp)) >
"hbase.hregion.majorcompaction" + rand() *
hbase.hregion.majorcompaction.jitter"

至于split,并不是设置了hbase.hregion.max.filesize(默认10G)为很大就保证不split了,需要有以下的算法,参见
IncreasingToUpperBoundRegionSplitPolicy是0.94.0默认region split策略
  这里的split有一个判断条件,先计算这tableRegionsCount(regionserver上的这个table的online的region个数),
然后循环计算此region的所有store是否太大,这是通过getSizeToCheck方法计算出一个size,若当前的store总大小大于这个值,则表示此region需要split.

getSizeToCheck的计算方法首先判断tableRegionsCount是否等于0,若是则返回hbase.hregion.max.filesize ,若不是,则计算Math.min(getDesiredMaxFileSize(),

this.flushSize * (tableRegionsCount * tableRegionsCount)。

 

抱歉!评论已关闭.