Hbase 之四 Compaction & Split

前言

​ 本篇是 HBase 相关内容的第四篇,上一篇我们整理了一下 HBase 的读写过程,这一篇继续来略微的探究一下 HBase 保存性能的关键 HFile Compaction 和 Region Split,文中如有错误欢迎指正,共同进步!

HFile Compaction

HFile Compaction 的作用

​ 上一篇博客中有提到,HBase 的 MemStore 在满足一定的条件下会将内存中的数据刷写成 HFile,而一个 MemStore 刷写就会形成一个 HFile,随着时间的推移同一个 Store 下的 HFile 会越来越多这样会影响查询的效率,此外在 HBase 中数据无论是修改还是删除实际上都是新增一条数据而原来的数据并没有真正的被删除因此也会占据存储空间影响查询性能。

​ 为了解决上述情况 Hbase 中使用了 Compaction 来解决,其作用主要作用有两个:

  1. 将多个小的 HFile 合并成一个更大的 HFile 以增加查询性能
  2. 在合并过程中对过期的数据(超过TTL,被删除,超过最大版本号)进行真正的删除

HFile Compaction 的分类

​ 在 Hbase 中 Compaction 有俩种分别是 Minor CompactionMajor Compaction :

  • Minor Compaction :会将邻近的若干个 HFile 合并,在合并过程中会清理 TTL 的数据,但不会清理超过最大版本号的数据以及被删除的数据
  • Major Compaction:会将一个 store 下的所有 HFile 进行合并,并且会清理掉过期的和被删除的数据,即在 Major Compaction 会删除全部需要删除的数据。值得注意的是,一般情况下,Major Compaction时间会持续比较长,整个过程会消耗大量系统资源,对上层业务有比较大的影响。因此,生产环境下通常关闭自动触发Major Compaction功能,改为手动在业务低峰期触发。

Minor Compaction 和 Major Compaction 如下图:

你可能感兴趣的:(HBase,hbase,大数据,java)