温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

HBase 0.94中的Split策略有什么用

发布时间:2021-12-08 13:55:18 来源:亿速云 阅读:110 作者:小新 栏目:云计算

这篇文章主要介绍HBase 0.94中的Split策略有什么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

HBase 0.94中的Split策略

HBase 0.94之前版本中,split使用的是ConstantSizeRegionSplitPolicy。当region中文件大小超过配置中所指定大小时,会进行切分。

而在0.94版本之后,默认split策略修改为了IncreasingToUpperBoundRegionSplitPolicy。该策略使用了另一种方法来计算是否应当切割,导致原先的参数失效。

该方法中的分配策略,是根据table中region的个数平方,乘以memstore的大小。得出应当切分的大小。

假设memstore size配置为128M,则在memstore第一次刷入HFile数据时,进行第一次split,1 * 1 * 128M = 128M。

当region数达到2个时,2 * 2 * 128M = 512M。

当region数达到3个时,3 * 3 * 128M = 1152M。

依此类推。

当region个数到达30个时,30 * 30 * 128 = 107648M = 105.1G。即在此时,region的切分大小已经超过了我们原先在ConstantSizeRegionSplitPolicy策略中设置的100G大小。

简单分析

对这种策略进行简单的分析,可以看到,在数据写入初期,这种策略可以快速的对现有region进行split,使得在一开始就可以将热点region切分到多个server上。同时由于region size较小,也可以避免split操作对写入的阻塞。

而在后期,当region数量逐渐增多,单个region size逐渐增大时,split频率会急速减少,避免在region过大时频繁split的情况。

这种策略一方面在数据量增大的情况下减少了region的切分次数,达到了我们期望的尽量减少split的需求,避免对写入造成影响。同时在初期的快速切分,在基本不影响写入的同时,也减少了我们原先需要手动操作split的问题。可以认为,这种策略是符合我们需求的。当然,还需要进一步的测试来进行验证。

源码

源码如下:

/**
 * @return Region max size or <code>count of regions squared * flushsize, which ever is
 * smaller; guard against there being zero regions on this server.
 */
long getSizeToCheck(final int tableRegionsCount) {
  return tableRegionsCount == 0? getDesiredMaxFileSize():
    Math.min(getDesiredMaxFileSize(),
      this.flushSize * (tableRegionsCount * tableRegionsCount));
}
 
@Override
protected boolean shouldSplit() {
  if (region.shouldForceSplit()) return true;
  boolean foundABigStore = false;
  // Get count of regions that have the same common table as this.region
  int tableRegionsCount = getCountOfCommonTableRegions();
  // Get size to check
  long sizeToCheck = getSizeToCheck(tableRegionsCount);
 
  for (Store store : region.getStores().values()) {
    // If any of the stores is unable to split (eg they contain reference files)
    // then don't split
    if ((!store.canSplit())) {
      return false;
    }
 
    // Mark if any store is big enough
    long size = store.getSize();
    if (size > sizeToCheck) {
      LOG.debug("ShouldSplit because " + store.getColumnFamilyName() +
        " size=" + size + ", sizeToCheck=" + sizeToCheck +
        ", regionsWithCommonTable=" + tableRegionsCount);
      foundABigStore = true;
      break;
    }
  }
 
  return foundABigStore;
}

以上是“HBase 0.94中的Split策略有什么用”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI