Hudi系列21:离线Compaction

文章介绍了离线Compaction在处理大数据量的MOR表时的优势,通过关闭在线compaction,启用定时任务执行compaction以避免对写流程的干扰。设置了相关参数如并发任务数、内存限制等,并提供了使用Java程序手动执行离线compaction的命令示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 离线Compaction 概述

MOR 表的 compaction 默认是自动打开的, 策略是 5 个 commits 执行一次压缩。 因为压缩操作比较耗费 内存,和写流程放在同一个 pipeline, 在数据量比较的时候 (10W+/s qps),容易干扰写流程,此时采用离线定时任务的方式执行 compaction 任务更稳定。

1.1 设置参数

  1. compaction.async.enabled 为 false,关闭在线 compaction。
  2. compaction.scheduler.enabled 仍然保持开启,由写任务阶段性出发压缩 plan Compaction过程。

1.2 原理

一个 compaction 的 任务的执行包括两部分:

  1. schedule 压缩 plan
    该过程推荐由写任务定时出发,写参数 compaction.scheduler.enabled 默认开启
  2. 执行对应的压缩plan

1.3 使用方式

执行命令:
离线 compaction 需要手动执行 Java 程序, 程序入口:

  1. hudi-flink1.14-bundle-0.12.jar
  2. org.apache.hudi.sink.compact.HoodieFlinkCompactor
// 命令行方式
./bin/flink run -c org.apache.hudi.sink.compact.HoodieFlinkCompactor lib/hudi-flink1.14-bundle-0.12.0.jar --path hdfs://xxx:8020/table
参数名required默认值值备注
–pathtrue目标表的路径
–compaction-tasksfalse-1压缩 task 的并发,默认是待压缩 file group 的 数量
–compaction-max-memoryfalse100 (单位 MB)压缩时 log 数据的索引 map,默认 100MB,内存足够可以开大些
–schedulerfalsefalse是否要执行 schedule compaction 的操作
–seqfalseLIFO执行压缩任务的顺序,默认是从最新的压缩plan 开始执行,可选值: LIFO:从最新的plan开始执行; FIFO: 从最老的plan开始执行
–servicefalsefalse是否开启 service 模式,service模式会打开常驻进程,一直监听压缩并提交到 集群执行(从0.11 开始执行)
–min-compaction-interval-secondsfalse600 (单位 秒)service 模式下的执行间隔,默认10分钟
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值