HBase SplitSize 到底是多少

大家都知道HBase的一个重要特性就是split,split通常情况下是自动执行的,而trigger条件就是region的size到达一定大小。那么到底这个大小是多少纳?

笔者google了一些文章,不少文章说是256M,但也有一些说是1G。那么到底是多少纳?

HBase是支持设置Table级别的splitsize的,HTableDescriptor类里读取FileSize的代码如下:

public long getMaxFileSize() {
    byte [] value = getValue(MAX_FILESIZE_KEY);
    if (value != null)
      return Long.valueOf(Bytes.toString(value)).longValue();
    return HConstants.DEFAULT_MAX_FILE_SIZE;
  }

默认的FileSize来自HConstant类:

/** Default maximum file size */
  public static final long DEFAULT_MAX_FILE_SIZE = 1024 * 1024 * 1024;


因此默认的SplitSize是1G。

那么再看下check RegionSize的类是怎么检查的:

void configureForRegion(HRegion region) {
    super.configureForRegion(region);
    long maxFileSize = region.getTableDesc().getMaxFileSize();

    // By default we split region if a file > HConstants.DEFAULT_MAX_FILE_SIZE.
    if (maxFileSize == HConstants.DEFAULT_MAX_FILE_SIZE) {
      maxFileSize = getConf().getLong("hbase.hregion.max.filesize",
        HConstants.DEFAULT_MAX_FILE_SIZE);
    }
    this.desiredMaxFileSize = maxFileSize;
  }

1.拿到当前region的表的MaxFileSize

2.如果等于默认值则选择默认值,在此处代码可知配置文件里改region split size的key名是:hbase.hregion.max.filesize。

3.如果不等于默认值则选择已指定的值

至于网上很多朋友说是256M,那是因为在0.92.0版本之后的一次改动中将此值从原来的256M改到了1G。因此~很多文档要更新下拉~


你可能感兴趣的:(hbase)