压缩可显着提高查询性能。 在加载数据期间,几个CarbonData文件会被生成,这是因为数据只在每次加载(每个load segment和一个B+ tree 索引)时被排序。
频繁的load数据会导致carbon的存储目录生成很多影响查询性能的分散的CarbonData小文件,CarbonData提供了压缩load数据的措施。 压缩过程通过对来自各个分段的数据进行合并排序,将多个分段合并为一个大分段。
有两种压缩类型:
轻量(Minor )压缩和重量级(Major )压缩
- 轻量压缩(Minor Compaction):
用户可以指定要合并的load的数量,如果参数carbon.enable.auto.load.merge被设置为true,则轻量压缩在每次数据load时触发。如果有任何segment可用于合并,则压缩将与load data并行运行。
轻量压缩有两个级别:
- Level 1:合并尚未被压缩的segments
Level 2: 再次合并压缩的segments生成更大的segments
ALTER TABLE table_name COMPACT 'MINOR'
- 重量级压缩(Major Compaction)
在重量级压缩中,很多segments可以合并成一个大的segments。用户可以指定压缩大小,直到segments可以被合并。通常在非高峰时段进行大型压缩。该命令将指定数量的段合并到一个段中:
ALTER TABLE table_name COMPACT 'MAJOR'
在carbon.properties中配置和压缩有关的参数:
属性 | 描述 | 默认值 | 适用压缩级别 |
---|---|---|---|
carbon.compaction.level.threshol | 决定多少段要合并。比如如果设置为“2,3”, 则会对没2个segments进行级别1的压缩, 对3个级别1压缩后的segments进一步进行级别2的压缩。 | 4, 3 | Minor |
carbon.major.compaction.size | 用于重量级压缩低于此阈值的segments将被合并。 | 1024 MB | Major |
carbon.numberof.preserve.segments | 该属性设置要保留的segments数量以防止被压缩。 例如carbon.numberof.preserve.segments = 2, 那么2个最新的segments总是被排除在压缩之外。默认没有segments被保留。 合法值:0-100 | 0 | Minor/Major |
carbon.allowed.compaction.days | 在指定的天数内load data的segment将被合并。如果配置为2 ,仅在2天内load的segment被合并。默认禁用 。合法值:0-100 | 0 | Minor/Major |
carbon.number.of.cores.while.compacting | 用户压缩的cpu数量。合法值:0-100 | 2 | Minor/Major |
压缩后源数据依然存在 可以运行一下命令清除:
CLEAN FILES FOR TABLE table_name