compaction合并操作
compaction操作将小文件合并成大文件,加快查询速度,减少文件数量,减少资源占用。compaction分为两种:
- minor compaction:将一个region中一部分小文件合并到一个新的文件中
- major compaction:将一个region中所有文件都合并到一个文件中。在这个过程中剔除已删除的数据、剔除多于的多版本数据。
HBase会在以下几种情况下检查是否进行合并:
- 当memstore刷写到磁盘时
- 当检查线程定时检查时。检查线程的频率由参数
hbase.server.thread.wakefrequency
和hbase.server.thread.wakefrequency.multiplier
控制。 - shell中执行
compaction
或者major_compaction
命令时
当检查到需要合并时,HBase根据以下配置项判断是否需要进行major合并:
hbase.hregion.majorcompaction
:默认是24小时hbase.hregion.majorcompaction.jitter
:抖动,默认是20%
以上两个参数意味着major合并周期为随机取19.2小时~28.8小时之间的数值。当major合并周期还未到达时,执行minor合并。
minor合并根据以下参数选择要合并的文件,并判断是否达到合并阈值:
hbase.hstore.compaction.min
:最少合并的文件数量,默认是3,表示最少合并3个文件hbase.hstore.compaction.max
:最多合并的文件数量,默认是10,表示最多合并10个文件。如果一次合并的文件过多,可能会导致minor合并速度变慢hbase.hstore.compaction.min.size
:需要合并的文件大小总和如果达不到这个值就不进行合并。默认是memstore刷写阈值。hbase.hstore.compaction.max.size
:文件大小超过这个值的将会被排除在外。默认是Long.MAX_VALUE
表示没有限制。