首页/数据/数仓建模速查/Hudi Clustering 与小文件治理
湖仓与引擎63 条

Hudi Clustering 与小文件治理

Clustering 按新布局重写小文件以提升查询效率,可在写入链路内异步执行;与 compaction 的职责不同,两者都需要独立调度与监控。

数仓建模速查数据更新于 2026-10-13

聚类解决什么问题

Hudi Clustering 按新的布局把一批小文件重写成大小合适的文件,减少查询时的文件打开与元数据开销,也可以顺便按新的列顺序重组数据。它和 compaction 是两件事:compaction 负责把 MOR 表的 log 文件合并回 base 文件,clustering 负责重排文件布局。

基本信息

适用对象Apache Hudi 0.9 及以后版本的表
执行方式inline 随写入执行,或 async 独立调度
核心策略小文件阈值、目标文件大小、可选排序列
与 compaction职责不同,各自调度、各自监控
监控项待执行的聚类计划数量与执行耗时

典型使用场景

  • 写入频率高导致小文件堆积,查询打开成千上万个文件
  • 历史分区需要整理成更大的文件,降低长尾扫描时间
  • 希望按新的排序列重组数据,提升按列过滤的裁剪效率
  • 表经历过结构变更,需要重整布局以恢复读写性能
  • MOR 表查询性能下降,需要区分是 log 积压还是文件过碎

开启异步聚类

开启异步聚类
# 交给写入链路内联执行,或关闭后改用独立调度触发
hoodie.clustering.inline=true

# 每积累 4 次提交执行一次内联聚类,避免每次写都触发
hoodie.clustering.inline.max.commits=4

# 目标文件大小 1GB,小于 300MB 视为小文件纳入计划
hoodie.clustering.plan.strategy.target.file.max.bytes=1073741824
hoodie.clustering.plan.strategy.small.file.limit=314572800

# 聚类会与写入争抢资源,生产环境建议限制并发并单独编排
hoodie.clustering.async.max.commits=4

聚类与 compaction 分工

对比项ClusteringCompaction
处理对象base 文件布局与小文件MOR 表的 log 文件
触发原因文件过碎或需重排序增量日志积累过多
是否改内容不改数据,只改组织方式把日志合并进 base 文件
失效风险计划积压,写入延迟上升不执行会导致读放大严重
聚类计划需要积压到一定数量才执行,积压本身不一定是故障;但待处理计划数持续上升、写入耗时同步变长时,说明调度能力跟不上写入速度,需要调整阈值或增加执行窗口。
聚类与 compaction 同时高频开启而不限制资源,写入任务会排队等待,表现为端到端延迟上升。上线前先用压测确认两者叠加后的写入吞吐能接受。

易错点

  • 把 clustering 当成 compaction 的替代品,MOR 表的 log 文件无人合并,读放大持续恶化
  • 聚类阈值设置过激,频繁重写文件,写入成本显著上升而收益有限
  • 只关注聚类是否执行,不监控待处理计划数,积压到影响写入才发现
  • 聚类期间未限制并发,与实时写入争抢资源,导致写入任务大面积延迟

数据来源与参考

  • Apache Hudi 官方文档:Clustering
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌