HBase源码分析之org.apache.hadoop.hbase.regionserver包

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.upperLimit
hbase.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被选择 默认: 3
hbase.hstore.compaction.max
每个“小”合并的HStoreFiles最大数量。默认: 10
hbase.hstore.blockingStoreFiles
当一个HStore含有多于这个值的HStoreFiles(每一个memstore flush产生一个HStoreFile)的时候,会执行一个合并操作, update会阻塞直到合并完成,直到超过了hbase.hstore.blockingWaitTime的值 默认: 7
hbase.hstore.blockingWaitTime
hbase.hstore.blockingStoreFiles所限制的StoreFile数量会导致update阻塞,这个时间是来限制阻塞时间的。当超过了这个时间,HRegion会停止阻塞update操作,不过合并还有没有完成。默认为90s.
默认: 90000
hbase.hregion.
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值