HBase 计划外启动 Major Compaction 的原因

严格地说,这一描述是不准确的,本文讨论的问题是一个比较容易遇到的问题,启动的并非是真正意义上的 Major Compaction,因为严格意义上的 Major Compaction 指的是将 Region 内所有HFile 合并为一个大文件,而不是一部分,这里描述的问题是:依然合并的是部分文件,但是由于合并文件的总体积较大(超过了2.5 GB),转而动用了执行 Major Compaction 的线程池去做 Compact,同时在日志中,还会显示 “completed major compaction …” 字样的信息。

HBase 的 Compaction 有两个线程池,一个是为 Minor Compaction 准备的, 一个是为 Major Compaction 准备的,hbase.regionserver.thread.compaction.throttle 是决定 Compaction 请求放入哪个线程池的阈值,当待合并文件的总大小小于这个阈值时,就是一个 Minor Compaction,当待合并文件的总大小大于这个阈值时,就是一个 Major Compaction。这个阈值的默认值是:2.5 GB (2684354560 Bytes), 这是基于以下方式计算得到的:

2 × hbase.hstore.compaction.max(StoreFile文件数量,默认10个) × hbase.hregion.memstore.flush.size (StoreFile文件大小,默认128MB)= 2.5 GB

所以,有时候我们可能会发现:虽然集群已经 Disabled 了周期性自动 Compact

猜你喜欢

转载自blog.csdn.net/bluishglc/article/details/133700337