大而话之BigData 2020-01-05
Minor Compact
Minor Compact是指少量HFile文件按照Minor Compact规则进行合并;它的正常流程是这样的,探测到有新的文件刷进来(比如因为memstore的flush,当然可以直接写入HFile而跳过memstore,比如Bulk写入),此时Region Server只要发现同一个列簇有3个及以上的文件,将会扫描文件列表,然后将符合合并规则文件纳入到list中,并且list中文件数>1,则将会进行compact;其中规则如下:
所以看到minor的规则稍微有点复杂,原则是减少合并(文件合并要门当户对),避免形成大文件(达到一定程度之后就不在合并)。
另外minor compact在合并文件过程中,只是数据进行排序,但是并不会执行物理删除,比如墓碑文件标记的删除数据,TTL超期清理数据,以及超出多版本阈值的数据清理。这些工作什么时候去做呢?
Major Compact
数据清理的工作,都是在Major Compact里面去做,Major操作是无差别的将所有的同一个column family的所有文件进行合并;在合并的过程中将会对数据进行清理,那些需要删除掉的,过期的数据都会在Major Compact里面去做,当然也包括整合数据排序(HBase的数据排序是字段顺序)。所以Major Compact在数据层面做的事情还是挺多的,但是因为他产生的IO消耗同样非常巨大,所以一般都会禁用自动major compact,而是会手工进行数据合并。
参考:
https://blog.csdn.net/u014297175/article/details/50456147