HBase中的Compaction详解

Compaction的作用

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

Compaction的分类

Minor Compaction:

Minor Compaction会将临近的若干个较小的 HFile 合并成一个较大的 HFile,但不会清理过期和删除的数据

Major Compaction:

Major Compaction 会将一个 Store 下的所有的 HFile 合并成一个大 HFile,并且会清理掉过期和删除的数据。

注意:当文件数超过三个时,手动Compact和Major Compact实现的效果是一样的

Compaction的流程

  1. HBase启动一个独立线程从对应的Store中选取要合并的HFile;
  2. 从这些HFile中依次读出KeyValue,进行归并排序处理写到./tmp目录下的临时文件;
  3. 将临时文件移动到Store的数据目录;
  4. 将Compation的输入文件路径和输出文件封装成KeyValue写入HLog,并标记为Compation,强行执行sync;
  5. 合并成新的HFile取代之前的HFile对外提供服务;
  6. 删除已经被合并的HFile文件。

 

触发时机

  • MemStore Flush:每次MemStore Flush都会检查当前Store的文件数量,如果达到阈值则触发Compaction,此时整个Region的所有Store都会执行Compact检查;
  • 后台周期性检查:后台线程CompactionChecker定期触发检查对应的Store是否需要执行Compation,先检查Store的文件数量然后检查是否满足Major Compation条件(默认7天执行一次);
  • 手动触发;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值