hudi使用过程中的问题总结

一、hudi的commit 和deltacommit的区别是什么?

COMMIT 是全量写入的强一致性动作,适合 COW 表与 MOR 表的 Compaction 场景;DELTA_COMMIT 是 MOR 表的增量写入优化,通过日志追加实现快速入湖,两者结合让 Hudi 同时支持批量与实时数据处理,满足不同读写性能需求。

对比维度COMMITDELTA_COMMIT
适用表类型Copy-On-Write (COW) 表;MOR 表的 Compaction 完成阶段Merge-On-Read (MOR) 表
数据写入目标直接写入列式存储的 Base File(如 Parquet)写入行存 Delta Log(如 Avro 日志),延迟合并到 Base File
写入特性全量重写受影响的文件组,写入成本高、查询性能稳定增量追加日志,写入成本低、查询需合并日志与 Base File
典型场景批量全量写入、COW 表的 Upsert/Insert、MOR 表 Compaction 生成新 Base FileMOR 表的近实时增量写入、流式数据快速入湖

二、MOR 表 + Compaction + 时间旅行 + 存储分析

Hudi MOR 表的多版本存储遵循增量存储 + 文件粒度复用原则,而非简单的全量拷贝:

 2.1 Compaction 对 FileSlice 的影响

在 MOR 表中:

  • 一个 FileGroup 包含多个 FileSlice(每个对应一个 commit/deltacommit)。
  • Compaction 会:
    • 将某个 FileSlice 中的 Base File + Delta Log Files 合并成一个新的 Base File
    • 生成一个新的 FileSlice(带有新的 base file,无 log files)。
    • 在 Hudi Timeline 上记录一个 .commit(注意:不是 .deltacommit)。

🔄 Compaction 不会立即删除旧的 base file 和 log files!

这些旧文件是否保留,取决于 Cleaner(清理)策略

2.2 案例分析

2.2.1 Timeline 和分析表格
  • t0: base B0
  • t1: deltacommit → 生成 log 文件 L1
  • t2: deltacommit → 生成 log 文件 L2
  • t3compaction → 合并 base B0 + L1 + L2 → 生成新 base file B3,记录为 .commit
  • t4: deltacommit → 生成 log 文件 L4

并且你假设:四个版本都保留(即 Cleaner 尚未删除任何文件)

时间点操作类型写入数据量(记录数)生成文件文件大小文件用途说明是否保留(Cleaner 未运行)可用于哪些时间点查询
t0Bulk Insert1,000,000B0.parquet100 MB初始 Base File✅ 是t1, t2
t1Delta Commit100,000L1.log10 MB增量日志(更新/插入)✅ 是t1, t2
t2Delta Commit150,000L2.log15 MB增量日志✅ 是t2
t3Compaction—(合并已有数据)B3.parquet125 MB合并 B0+L1+L2 的新 Base File✅ 是t3, t4
t4Delta Commit80,000L4.log8 MBCompaction 后的新增量日志✅ 是t4
2.2.2 存储汇总(Cleaner 未运行,保留全部历史)

表格

指标数值
物理文件总数5 个
总存储占用258 MB
当前最新有效数据大小133 MB(B3 + L4)
历史冗余存储125 MB(B0 + L1 + L2)
存储膨胀率≈ 94%

膨胀率 = (总存储 - 有效数据) / 有效数据 = (258 - 133) / 133 ≈ 0.94

2.2.3 时间旅行查询能力(基于保留的文件)

表格

查询时刻所需文件组合是否可查说明
t1B0 + L1✅ 是日志 L1 存在
t2B0 + L1 + L2✅ 是所有日志存在
t3B3✅ 是Compaction 快照
t4B3 + L4✅ 是当前最新状态

只要 Cleaner 未删除旧文件,所有历史时刻均可

2.2.4 对比:启用 Cleaner 后(commits.retained=1

表格

项目清理前(保留全部)清理后(仅留最新)
保留文件B0, L1, L2, B3, L4B3, L4
总存储258 MB133 MB
支持 t1/t2 查询?✅ 是❌ 否
适用场景审计、回溯、CDC实时分析、节省成本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九度-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值