Store File 的管理(compact,split)

Store File 的管理(compact,split)

前言

在之前的介绍中,我们了解了 HBase 从 mem store 刷写到磁盘的条件。

无论是 HDFS 还是 linux 本身的文件系统,对小文件的管理都没有大文件来的有效,打开小文件需要消耗更多的文件句柄。在小文件中指定 rowkey 的数据查询性能没有在少量大文件中查询来的快。但是大小都是相对而言的,当 HFlie 比较大的时候,又会影响到查询效率,就需要对 store 文件夹中的文件做一些管理,防止文件太小太大。

compact

HBase RS 提供了两种合并方式。

1. Minor Compact

会频繁进行,通过参数 hbase.hstore.compactionThreshold 控制,在 HFile 满足该值时,进行 Minor Compact。Minor Compact 只选取 region 下的部分HFile 进行 compact,并且选取的文件大小不能超过 hbase.hregion.max.filesize

2. Major Compact

会对整个 region 下,相同列族的所有 HFile 文件合并,也就是说major compact结束后,同一个列簇下的HFile会被合并成一个。major compact是一个比较长的过程,对底层I/O的压力相对较大。

major compact除了合并HFile外,另外一个重要功能就是清理过期或者被删除的数据。前面提到过,HBase的delete操作也是通过append的方式写入,一旦某些数据在HBase内部被删除了,在内部只是被简单标记为删除,真正在存储层面没有进行数据清理,只有通过major compact对HFile进行重组时,被标记为删除的数据才能被真正的清理。

compact操作都有特定的线程进行,一般情况下不会影响RS上数据写入的性能,当然也有例外:在compact操作速度跟不上region中HFile增长速度时,为了安全考虑,RS会在HFile达到一定数量时,对写入进行锁定操作,直到HFile通过compact降到一定的范围内才释放锁。

Split

当单个 HFile 文件非常大的时候,会影响查询效率,就引入了 split 来切分文件。
在这里插入图片描述
一个较大的region通过split操作,会生成两个小的region,称之为Daughter,一般Daughter中的数据是根据rowkey的之间点进行切分的。

1. split 过程

1.rs 先更改 zk 中该 region 的状态为 spliting。
2.master 检测到 region 状态改变。
3.region 会在存储目录下新建 .split 文件用于保存 split 后的 daughter region 信息。
4.parent region 关闭数据写入并触发 flush 操作,保证所有写入 parent region 的数据都可以持久化。
5.在 .split 文件夹下新建两个 region,称为 daughter A、daughter B。
6.Daughter A、Daughter B拷贝到HBase根目录下,形成两个新的region。
7.Parent region通知修改.META.表后下线,不再提供服务。
8.Daughter A、Daughter B上线,开始向外提供服务。
9.如果开启了balance_switch服务,split后的region将会被重新分布。

上面1 ~ 9就是region split的整个过程,split过程非常快,速度基本会在秒级内,那么在这么快的时间内,region中的数据怎么被重新组织的?

其实,split只是简单的把region从逻辑上划分成两个,并没有涉及到底层数据的重组,split完成后,Parent region并没有被销毁,只是被做下线处理,不再对外部提供服务。而新产生的region Daughter A和Daughter B,内部的数据只是简单的到Parent region数据的索引,Parent region数据的清理在Daughter A和Daughter B进行major compact以后,发现已经没有到其内部数据的索引后,Parent region才会被真正的清理。

意思是在新产生的分区 region daughter A 在 major compact 的时候数据才会拷贝?

思考

  • 既然当单个 region 中的 HFile 数增长到一定程度会触发分区,那我们可以采用预分区的方式来帮助 HBase 减少这个操作。

参考:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值