HBase Minor&Major Compaction 解析

众所周知,Apache HBase是一个分布式的基于于读性能优化的列式存储,读性能的优化来自于每个列簇对应一个文件。HBase最初思想来源于Google文件系统。

一个列簇对应一个文件的情况并不保证这样,尤其是在HBase频繁写的时候,因此HBase需要一种机制把HFiles合并以减少最大磁盘寻址开销以提高读性能。这个过程称为compaction

Compaction有两方式:major compaction和minor compaction。

Minor Compactions:合并一系列小文件为一个大文件,合并的文件数目是可以配置的,也可以配置minor compaction的频率。Minor compactions十分重要,如果没有minor compactions,读固定的行需要很大磁盘读开销,造成性能问题。

Major Compactions:读取一个Region下面的所有Store files并写入到一个Store file。

每个HBase表有:
1 一或多个列簇:列分组,不同列在物理上隔离
2 一或多个region:类似于shards,代表一个行集

每个HBase表的每个列簇在一个region下面都有一个store,包括:
1 MemStore - 用于存储临时的修改的一个内存空间
2 0或多个Store files - 当MemStore填充满后会被创建,也称为HFiles

这些Store files都是不可变的,在每个MemStore flush的时候HBase会创建一个新的文件。Compaction的作用就是把一个Region下面的Store files合并成更少的Store files从而优化性能。

Minor compactions不会做任何删除动作,只是把一些小文件合并为更大的文件。只有Major compactions才会有删除的动作。除此之外,还有更多的compaction机制,在此不作详述。

如果是要合并所有的文件,推荐使用Major compactions,因为除了可以做Minor compactions能做的合并之外,还会删除无用的数据。

使用以下命令手动触发major compaction

major_compact "table_name"

当HBase积累很多HFile时而不做compaction,可以获得更好的写性能。相反,如果通知HBase做compaction,读性能则会更好。

HBase可以指定什么时候做compaction并指定最大HFiles文件个数来确保可以实现不错的读性能。

通常情况下,flush和compaction操作可以同时进行。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值