更新时间:2025-07-01 GMT+08:00
分享

Compaction篇

如何判断compaction是否在执行?

执行show compaction on <database name>.<table name>

  • MRS 3.5.0-LTS之前版本:

    分析结果:

    1. 返回结果为空,代表compaction未配置,Hudi表没有做过一次compaction。
    2. 返回结果第二列的值为compaction,代表这是一个compaction计划,该计划未被执行。
    3. 返回结果第二列的值为commit,代表该compaction计划已被执行。
  • MRS 3.5.0-LTS及之后版本:

    分析结果:

    1. 返回结果为空,代表compaction未配置,Hudi表没有做过一次compaction。
    2. 返回结果第二列的值为requested,代表这是一个compaction计划,该计划未被执行。
    3. 返回结果第二列的值为completed,代表该compaction计划已被执行。

如何判断compaction是否设置的合理?

判断标准:

随机找一个近期写的parquet文件,parquet文件名称中第一个下划线之前的内容就是FileID,第二个下划线之后的内容就是这个parquet文件的commit time,同理log文件也是。把FileID相同的parquet文件和log文件都找出来,先找到同FileID中commit time最大的parquet文件,把这个commit time记作A,再去找同FileID中所有commit time大于等于A的log文件。

  1. 如果log文件的数量只有1个,而且size小于300M,那compaction是合理的,处于最佳状态。
  2. 如果log文件的数量有多个,而且size都是1G的,那compaction不合理,已经影响到读性能。

举例

Hudi表如下:

分析结果:00000000-e42f-4a07-be73-23c50a635ed3-0对应两个parquet文件,时间戳最大的是20250328141314559,没有找到大于或等于该时间戳的log文件。00000001-919b-4bc2-88b7-6dff8408f3eb-0对应一个parquet文件,时间戳大于或等于20250328141507479的log文件只有一个,但是size是931B,compaction是合理的。

相关文档