更新时间:2022-02-22 GMT+08:00

合并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

表1 合并参数

参数

默认值

应用类型

描述

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?