您现在的位置是:首页 >技术教程 >Hudi(五)集成Flink(3)网站首页技术教程
Hudi(五)集成Flink(3)
12、离线compaction
MOR表的compaction默认是自动打开的,策略是5个commits执行一次压缩。因为压缩操作比较耗费内存,和写流程放在同一个pipeline,在数据量比较大的时候(10w+/sqps),容易干扰写流程,此时采用离线定时任务的方式执行compaction任务更稳定。
12.1、设置参数
- compaction.async.enabled为false,关闭在线compaction。
- compaction.schedule.enabled仍然保持开启,由写任务阶段性触发压缩plan。
12.2、原理
一个compaction的任务的执行包括两部分:
- schedule压缩plan
该过程推荐由写任务定时触发,写参数compaction.schedule.enabled默认开启
- 执行对应的压缩plan
12.3、使用方式
1、执行命令
离线compaction需要手动执行Java程序,程序入口:
- hudi-flink1.13-bundle-0.12.0.jar
- org.apache.hudi.sink.compact.HoodieFlinkCompactor
// 命令行的方式
./bin/flink run -c org.apache.hudi.sink.compact.HoodieFlinkCompactor lib/hudi-flink1.13-bundle-0.12.0.jar --path hdfs://xxx:9000/table
2、参数配置
| 参数名 | required | 默认值 | 备注 |
| --path | true | -- | 目标表的路径 |
| --compaction-tasks | false | -1 | 压缩task的并发,默认是待压缩file group的数量 |
| --compaction-max-memory | false | 100 (单位 MB) | 压缩时log数据的索引map,默认100MB,内存足够可以开大些 |
| --schedule | false | false | 是否要执行schedule compaction的操作,当写流程还在持续写入表数据的时候,开启这个参数有丢失查询数据的风险,所以开启该参数一定要保证当前没有任务往表里写数据, 写任务的compaction plan默认是一直 schedule的,除非手动关闭(默认 5 个 commits 一次压缩) |
| --seq | false | LIFO | 执行压缩任务的顺序,默认是从最新的压缩 plan 开始执行,可选值: LIFO: 从最新的 plan 开始执行; FIFO: 从最老的 plan 开始执行 |
| --service | false | false | 是否开启service模式,service模式会打开常驻进程,一直监听压缩任务并提交到集群执行(从 0.11 开始执行) |
| --min-compaction-interval-seconds | false | 600 (单位 秒) | service模式下的执行间隔,默认10分钟 |
3、案例演示
create table t7(
id int,
ts int,
primary key (id) not enforced
)
with (
'connector' = 'hudi',
'path' = '/tmp/hudi_catalog/default/t7',
'compaction.async.enabled' = 'false',
'compaction.schedule.enabled' = 'true',
'table.type' = 'MERGE_ON_READ'
);
insert into t7 values(1,1);
insert into t7 values(2,2);
insert into t7 values(3,3);
insert into t7 values(4,4);
insert into t7 values(5,5);
// 命令行的方式
./bin/flink run -c org.apache.hudi.sink.compact.HoodieFlinkCompactor lib/hudi-flink1.13-bundle-0.12.0.jar --path hdfs://hadoop1:9000/tmp/hudi_catalog/default/t7
合并前:






U8W/U8W-Mini使用与常见问题解决
QT多线程的5种用法,通过使用线程解决UI主界面的耗时操作代码,防止界面卡死。...
stm32使用HAL库配置串口中断收发数据(保姆级教程)
分享几个国内免费的ChatGPT镜像网址(亲测有效)
Allegro16.6差分等长设置及走线总结