Hbase有两种压缩策略:minor和major。Minor compactions通常选择几个临近的小的storefiles把他们重写成一个。Minors 不会丢掉已删除或者过期的cells,只有major compactions才会做这些。有时一次Minor compactions将会选择一个store里的全部storefiles,因此,它实际上是一次局部的major compaction。
当进行完一次major compaction以后所有的store都只有一个storefiles,这对查询性能有很大提升。注意:major compaction将会在一个运行中的系统中重写全部store的数据,不提倡自动运行;major compactions 在大型系统中通常是手动进行的。
9.7.5.5.1. Compaction File Selection
为了了解选取storefile的核心算法,可以看下图:
/* normal skew:
*
* older ----> newer
* _
* | | _
* | | | | _
* --|-|- |-|- |-|---_-------_------- minCompactSize
* | | | | | | | | _ | |
* | | | | | | | | | | | |
* | | | | | | | | | | | |
*/
关键点:
hbase.store.compaction.ratio 比率在选择压缩文件的策略中被使用 (默认值1.2f).
hbase.hstore.compaction.min (.90版本中使用 hbase.hstore.compactionThreshold) (files) 在一次压缩发生前每个store中的至少有多少个storefiles被选择(默认值为2)
hbase.hstore.compaction.max (files) 在一次minor compaction发生前每个store中的最多有多少个storefiles被选择(默认值为10).
hbase.hstore.compaction.min.size (bytes) 任何一个storefile如果大于给定的大小将自动成为候选的将被压缩的storefile
默认与hbase.hregion.memstore.flush.size (128 mb)相同.
hbase.hstore.compaction.max.size (.92) (bytes) 任何storefile如果大于给定值将会自动被排除,不再压缩(默认值Long.MAX_VALUE).
Minor compaction 选择storefile的逻辑是基于文件大小的,当一个文件<=sum(比它小的文件) * hbase.hstore.compaction.ratio 将被选择
来源:oschina
链接:https://my.oschina.net/u/261847/blog/155924