HBase合并详解

一.什么是HBase Compaction

Hbase将Region中的Store中的一些HFile进行合并。

二.HBase合并原因:

HBase不停的刷写,导致存储目录中有过多的数据文件,文件太多会导致维护困难、降低数据查询性能和效率。对一堆的文件进行I/O操作,耗时太多。所以HBase定期会对这些琐碎的文件进行整理,即合并Compaction。

三.HBase合并原理:

分为三步:排序文件、合并文件、代替原文件服务。

HBase首先从待合并的文件中读出HFile中的key-value,再按照由小到大的顺序写入一个新文件(storeFile)中。这个新文件将代替所有之前的文件,对外提供服务。

四.HBase合并分类

HBase合并详解_第1张图片

1.Minor Compaction(小合并)

小合并是指将相邻的StoreFile合并为更大的StoreFile

2.Major Compaction(大合并)

大合并是将多个StoreFile合并为一个StoreFile

五.HBase合并时,清空以下三种数据

1.标记为删除的数据。

当我们删除数据时,HBase并没有把这些数据立即删除,而是将这些数据打了一个个标记,称为“墓碑”标记。在HBase合并时,会将这些带有墓碑标记的数据删除。

2.TTL过期数据

TTL(time to live)指数据包在网络中的时间。如果列族中设置了TTL过期时间,则在合并的过程中,发现过期的数据将被删除。

3.版本合并

若版本号超过了列族中预先设定的版本号,则将最早的一条数据删除。

如:列族设置版本号是5,当此列族第六次保存数据时,会将最早一次数据删除。

六.合并的触发时机

1.MEMStore Flush

内存中的数据flush刷写到硬盘上以后,会对当前Store中的文件进行判断,当数量达到阈值,则会触发Compaction。Compaction是以Store为单位进行合并的。当Flush刷写完成后,整个Region的所有Store都会执行Flush

2.后台线程周期性的检查

Compaction Checker线程定期检查是否触发Compaction,Checker会优先检查文件数量是否大于阈值,再判断是否满足major Compaction的条件的时间范围内,如果满足,则触发一次大合并Major Compaction。

大合并条件:[7-7*0.5,7+7*0.5](单位:天)

在Hbase配置文件中,通过下面的参数,可以调整大合并的条件

参数
hbase.hregion.majorcompaction 7(天)
hbase.hregion.majorcompaction.jitter 0.5(天)

3.手动触发

  • 由于很多业务担心MajorCompaction影响读写性能,所以选择在低峰期手动触发合并。
  • 当用户修改表结构后,希望立刻生效,则手动触发合并。
  • 运维人员发现硬盘空间不够,则会手动触发合并,因为删除了过期数据,腾出空间。

大合并优化,提高性能

MajorCompaction持续时间比较长,整个过程将消耗大量的系统资源,对上传业务有比较大的影响,所以线上业务通过将自动触发MajorCompaction改为业务低峰期的手动触发,来优化Hbase系统。

总结:

本文介绍了HBase的合并原因、合并原理、合并分类、何时触发合并,以及对大合并的性能优化等内容,这也是HBase不同于其他关系型数据库的一种新特性,也是HBase能存储大量数据的写入不会慢,而且随着数据量的增加,HBase读取速度也不会越来越慢的原因。希望本文能加深你对HBase合并的理解。通过这几篇文章对HBase的介绍后,后续的文章中将详细讲解HBase的完成存储流程。喜欢本文请点赞和收藏。

你可能感兴趣的:(HBase)