核心概念
Hudi Clustering对于在数据写入和读取提供一套相对完善的解决方案。它的核心思想就是: 在数据写入时,运行并发写入多个小文件,从而提升写入的性能;同时通过一个异步(也可以配置同步,但不推荐)进程或者周期性调度来执行小文件合并成大文件在这个过程中hudi还考虑到对数据按照特定的列进行重排序,这样在解决小文件问题的同时还优化了查询性能,可谓是“两全其美”。对于Clustering的手法其实是一种比较通用的优化数据重新布局的手段。其中在Hive/Spark SQL中都有类似的操作cluster by,只是在hudi中更加追求完美,多了一项合并小文件工作。关于cluster的几个配置参数:
| 配置项 | 默认值 | 说明 |
|---|---|---|
| hoodie.clustering.inline | false | |
| hoodie.clustering.schedule.inline | false | |
| hoodie.clustering.async.enabled | false | |
| hoodie.clustering.inline.max.commits | 4 | |
| hoodie.clustering.async.max.commits | 4 | |
| hoodie.clustering.plan.strategy.small.file.limit | 314572800 ( 300MB ) | 只有小于该值的文件才会被视为小文件,从而参与到 Clustering 中。 |
| hoodie.clustering.plan.strategy.target.file.max.bytes | 1073741824 ( 1GB ) | 限制 Clustering 生成的文件大小,默认是 1GB。合并后的最大文件不会超过该值。 |
| hoodie.clustering.plan.strategy.sort.columns | -- | 针对哪个列重新进行排序。对于该字段过滤条件的查询有很大性能提高。 |
计划与执行
Clustering 的执行机制和compaction的机制类似,都是分为Schedule和execute两个阶段。计划的阶段主要是规划哪些文件参与Clusetring,然后生成一

HudiClustering通过并发写入小文件提升性能,通过异步或同步合并优化查询。文章详细介绍了配置选项、执行机制、同步异步模式和计划策略,包括SparkSizeBased策略和排序列的重要性。
最低0.47元/天 解锁文章
1127

被折叠的 条评论
为什么被折叠?



