HBASE进阶(4): 重要工作机制(3)StoreFile Compaction/Region Split

1 StoreFile Compaction

  由于memstore每次刷写都会生成一个新的HFile,且同一个字段的不同版本(timestamp)和不同类型(Put/Delete)有可能会分布在不同的HFile中,因此查询时需要遍历所有的HFile。为了减少HFile的个数,以及清理掉过期和删除的数据,会进行StoreFile Compaction

  Compaction分为两种,分别是Minor CompactionMajor CompactionMinor Compaction会将临近的若干个较小的HFile合并成一个较大的HFile,并清理掉部分过期和删除的数据Major Compaction会将一个Store下的所有的HFile合并成一个大HFile,并且清理掉所有过期和删除的数据。

 

 

2 Region Split

默认情况下,每个Table起初只有一个Region,随着数据的不断写入,Region会自动进行拆分。刚拆分时,两个子Region都位于当前的Region Server,但处于负载均衡的考虑,HMaster有可能会将某个Region转移给其他的Region Server

Region Split时机:

1.1region中的某个Store下所有StoreFile的总大小超过hbase.hregion.max.filesize,该Region就会进行拆分(0.94版本之前)。

2.1region中的某个Store下所有StoreFile的总大小超过Min(initialSize*R^3 ,hbase.hregion.max.filesize"),该Region就会进行拆分。其中initialSize的默认值为2*hbase.hregion.memstore.flush.sizeR为当前Region Server中属于该TableRegion个数(0.94版本之后)。

具体的切分策略为:

第一次split1^3 * 256 = 256MB

第二次split2^3 * 256 = 2048MB

第三次split3^3 * 256 = 6912MB

第四次split4^3 * 256 = 16384MB > 10GB,因此取较小的值10GB

后面每次splitsize都是10GB

3.Hbase 2.0引入了新的split策略:如果当前RegionServer上该表只有一个Region,按照2 * hbase.hregion.memstore.flush.size分裂,否则按照hbase.hregion.max.filesize分裂。

 

 

posted @ 2021-09-03 23:36  秋华  阅读(75)  评论(0编辑  收藏  举报