1、Splitpolicy是Region在满足什么条件下,需要split操作,0.94版本中默认是IncreasingToUpperBoundRegionSplitPolicy
1)ConstantSizeRegionSplitPolicy,
2)KeyPrefixRegionSplitPolicy,
3)RegionSplitPolicy,可以在配置文件中指定policy的实现hbase.regionserver.region.split.policy,默认是IncreasingToUpperBoundRegionSplitPolicy
4)IncreasingToUpperBoundRegionSplitPolicy,
对于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)。
2、memstore flush,compact,split
FlushRequester,
MemStoreFlusher,实现FlushRequester接口,基于线程服务,在RegionServer启动的时候初始化,主要做flush memstore中的cache。
这里有一些参数需要关注一下,
hbase.regionserver.global.memstore.upperLimithbase.regionserver.global.memstore.lowerLimit
*. 如果全局memstore size超过了HighWaterMark(0.4), Block, 强制逐个flush region并且等待, 直到memstore size小于 HighWaterMark(0.4)
*. 如果全局memstore size在HighWaterMark(0.4)和LowWaterMark(0.35)之间,提交一个flush request给flush thread. 不阻塞.
hbase.hregion.memstore.flush.size 针对Region中的所有的memstore的内存之和memstoreSize的,当 memstoreSize大于该值时,就请求flush操作。
hbase.hregion.memstore.block.multiplier(2),memstore默认大小(flushsize)的2倍(默认值)-----blockingMemStoreFile(region server在写入时会检查每个region对应的memstore的总大小是否超过了memstore默认大小的2倍(hbase.hregion.memstore.block.multiplier决定),如果超过了则锁住memstore不让新写请求进来并触发flush,避免产生OOM)
hbase.hstore.compaction.ratio(.12f),当一个文件<=sum(比它小的文件) * hbase.hstore.compaction.ratio 将被选择hbase.hstore.compaction.min(hbase.hstore.compactionThreshold,老的版本)一次压缩前,至少有多少个storeFile被选择 默认: 3hbase.hstore.compaction.max每个“小”合并的HStoreFiles最大数量。默认: 10hbase.hstore.blockingStoreFiles当一个HStore含有多于这个值的HStoreFiles(每一个memstore flush产生一个HStoreFile)的时候,会执行一个合并操作, update会阻塞直到合并完成,直到超过了hbase.hstore.blockingWaitTime的值 默认: 7hbase.hstore.blockingWaitTimehbase.hstore.blockingStoreFiles所限制的StoreFile数量会导致update阻塞,这个时间是来限制阻塞时间的。当超过了这个时间,HRegion会停止阻塞update操作,不过合并还有没有完成。默认为90s.默认: 90000hbase.hregion.