(转载)Hbase -- hbase 压缩

戏子无情 提交于 2021-01-05 08:17:21

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 将被选择

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!