HBase Major Compaction 原理精讲与参数设置建议剖析

3,132 阅读3分钟

本套技术博客是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。版权声明:禁止转载,欢迎学习。QQ邮箱地址:1120746959@qq.com,如有任何学术交流,可随时联系。

网上的Hbase调优资料参差不齐,实在是不忍卒读,有些都是拼凑且版本过时的东西,我这里决定综合所有优质资源进行整合,写一份最全,最有深度,不过时的技术博客。辛苦成文,各自珍惜,谢谢!版权声明:禁止转载,欢迎学习,侵权必究!

1 Major Compaction 的核心作用

  • Major Compaction 的目的就是增加读性能,为什么呢?Major Compaction 除了合并文件,真的的角色就是从磁盘上把用户的数据(带墓碑标记的数据)删除掉。
  • HBase是建立在HDFS这种只有增加删除而没有修改的文件系统,所以只有在Major Commpaction的时候才能真正实现删除操作。
  • 那么在没有Major Compaction之前,用户查询时,怎么判断删除呢?其实用户增加一条数据就在HFile上增加一条KeyValue,类型就是PUT。当用户删除一条数据还是在HFile上增加一条KeyValue,类型是DELETE,这就是墓碑标记。墓碑标记并没有什么神秘的地方,只不过是value没有值,而类型是DELETE。因此在查询的时候其实就是把所有的HFile都遍历一遍,一旦发现墓碑标记的就不会把数据返回给用户,这样用户在SCAN操作这条数据时就被认为已经被删除。

2 Major Compaction 的参数设置

  • hbase.hregion.majorcompaction:majorcompaction发生的周期,单位是毫秒,默认值是7天。为0表示关闭Major Compaction。
  • hbase.hregion.mahorcompaction.jitter.majorCompaction:周期抖动参数,0-1.0参数范围,默认是0.5

3 Major Compaction到底该不该处理

  • 由于Major Compaction会占用大量的磁盘和网络IO,会严重的影响集群的性能,如果每次Major Compaction 都发生在高峰期,建议关闭自动的Major Compaction。
  • 使用定时任务在业务非高峰期来手动调用Major Compaction,如果完全不进行Major Compaction会对集群非常不利。

本套技术博客是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。版权声明:禁止转载,欢迎学习。QQ邮箱地址:1120746959@qq.com,如有任何学术交流,可随时联系。

4 升华

  • 如果数据有固定的TTL,并且越新的数据越容易被读到,那么DateTieredCompaction一般是比较合适的。
  • 如果数据没有TTL或者TTL较大,那么选择StripCompaction会比默认的策略更稳定。

5 总结

请尊重原创,辛苦成文,彼此珍惜,谢谢!

秦凯新 于深圳 201812011107