合并Segments
操作场景
频繁的数据获取导致在存储目录中产生许多零碎的CarbonData文件。由于数据排序只在每次加载时进行,所以,索引也只在每次加载时执行。这意味着,对于每次加载都会产生一个索引,随着数据加载数量的增加,索引的数量也随之增加。由于每个索引只在一次加载时工作,索引的性能被降低。CarbonData提供加载压缩。压缩过程通过合并排序各segment中的数据,将多个segment合并为一个大的segment。
前提条件
已经加载了多次数据。
操作描述
有Minor合并、Major合并和Custom合并三种类型。
- Minor合并:
在Minor合并中,用户可指定合并数据加载的数量。如果设置了参数“carbon.enable.auto.load.merge”,每次数据加载都可触发Minor合并。如果任意segment均可合并,那么合并将于数据加载时并行进行。
Minor合并有两个级别。
- Level 1:合并未合并的segment。
- Level 2:合并已合并的segment,以形成更大的segment。
- Major合并:
在Major合并中,许多segment可以合并为一个大的segment。用户将指定合并尺寸,将对未达到该尺寸的segment进行合并。Major合并通常在非高峰时段进行。
- Custom合并:
在Custom合并中,用户可以指定几个segment的id合并为一个大的segment。所有指定的segment的id必须存在并且有效,否则合并将会失败。Custom合并通常在非高峰时段进行。
具体的命令操作,请参考ALTER TABLE COMPACTION。
参数 |
默认值 |
应用类型 |
描述 |
---|---|---|---|
carbon.enable.auto.load.merge |
false |
Minor |
数据加载时启用合并。 “true”:数据加载时自动触发segment合并。 “false”:数据加载时不触发segment合并。 |
carbon.compaction.level.threshold |
4,3 |
Minor |
对于Minor合并,该属性参数决定合并segment的数量。 例如,如果该参数设置为“2,3”,在Level 1,每2个segment触发一次Minor合并。在Level2,每3个Level 1合并的segment将被再次合并为新的segment。 合并策略根据实际的数据大小和可用资源决定。 有效值为0-100。 |
carbon.major.compaction.size |
1024mb |
Major |
通过配置该参数可配置Major合并。低于该阈值的segment之和将被合并。 例如,如果该阈值是1024MB,且有5个大小依次为300MB,400MB,500MB,200MB,100MB的segment用于Major合并,那么只有相加的总数小于阈值的segment会被合并,也就是300+400+200+100 = 1000MB的segment会被合并,而500MB的segment将会被跳过。 |
carbon.numberof.preserve.segments |
0 |
Minor/Major |
如果用户希望从被合并的segment中保留一定数量的segment,可通过该属性参数进行设置。 例如,“carbon.numberof.preserve.segments”=“2”,那么最新的2个segment将不会包含在合并中。 默认不保留任何segment。 |
carbon.allowed.compaction.days |
0 |
Minor/Major |
合并将合并在指定的配置天数中加载的segment。 例如,如果配置为“2”,那么只有在2天的时间框架中被加载的segment可以被合并。在2天以外被加载的segment将不被合并。 默认为禁用。 |
carbon.number.of.cores.while.compacting |
2 |
Minor/Major |
在合并过程中写入数据时所用的核数。配置的核数越大合并性能越好。如果CPU资源充足可以增加此值。 |
carbon.merge.index.in.segment |
true |
SEGMENT_INDEX |
如果设置为true,则一个segment中所有Carbon索引文件(.carbonindex)将合并为单个Carbon索引合并文件(.carbonindexmerge)。 这增强了首次查询性能。 |
参考信息
建议避免对历史数据进行minor compaction,请参考如何避免对历史数据进行minor compaction?