设置参数,在建表的时候指定:
配置型 | 设定值 |
hoodie.clean.automatic | false |
hoodie.clean.async | true |
hoodie.cleaner.commits.retained | 1 |
create table small_file_hudi_cow (
id int,
name string,
age int,
city STRING,
date_str STRING
) using hudi
tblproperties (
type = 'cow',
primaryKey = 'id',
preCombineField = 'id',
'hoodie.clean.automatic' = 'false',
'hoodie.clean.async' = 'true',
'hoodie.cleaner.commits.retained' = '1'
)
partitioned by (date_str);
步骤 | 操作 | 文件系统 | 导入或者更新数据的命令 |
1 | insert | base file | INSERT INTO small_file_hudi_cow SELECT id, name, age, city, event_date FROM sample_data_partitioned where event_date='2023-11-03'; |
1 | update | base file | INSERT INTO small_file_hudi_cow SELECT id, name, age, city, event_date FROM sample_data_partitioned where event_date='2023-11-03'; |
1 | update | base file | INSERT INTO small_file_hudi_cow SELECT id, name, age, city, event_date FROM sample_data_partitioned where event_date='2023-11-03'; |
?第一步insert?
在第一次往表里面插入数据的时候,会产生第一个版本文件和时间记录信息,具体如下:
第二步 update数据
由于数据全量更新第一次的所有数据文件
第三步update?
由于全量更新第一次的所有数据文件,更新后添加对应的一组 file 信息。其文件信息及时间线如下:
第四步?Cleaning
执行脚本:
spark-submit --class org.apache.hudi.utilities.HoodieCleaner /data/axiang/hudi-0.14.0/hudi-bundle/hudi-utilities-bundle_2.12-0.14.0.jar \
--target-base-path /user/hive/warehouse/axiang_hudi.db/small_file_hudi_cow/ \
--hoodie-conf hoodie.cleaner.policy=KEEP_LATEST_COMMITS \
--hoodie-conf hoodie.cleaner.commits.retained=1 \
--hoodie-conf hoodie.cleaner.parallelism=200 \
--hoodie-conf hoodie.clean.async=true \
--hoodie-conf hoodie.clean.automatic=false
执行完成后,会生成一个clean 的时间线。同时删除历史版本的数据。其文件信息及时间线如下: