HBase Minor&Major Compaction 解析

来源:互联网 发布:防伪码生成算法php 编辑:程序博客网 时间:2024/06/05 18:18

众所周知,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操作可以同时进行。

原创粉丝点击