点击上方蓝色字体,选择“设为星标”
回复"面试"获取更多惊喜
Hi,我是王知无,一个大数据领域的原创作者。
放心关注我,获取更多行业的一手消息。
这个文章是我在浏览Hudi官网以及官方社区的博客过程中的一些记录。
目前笔者在生产中已经将重要的生产日志和操作记录同步到了数据湖中。
你可以在这里找到Hudi更多的资料:
https://hudi.apache.org/cn/docs/flink-quick-start-guide
小文件处理
Apache Hudi提供的一个关键特性是自我管理文件大小,这样用户就不需要担心手动维护表。
拥有大量的小文件将使计算更难获得良好的查询性能,因为查询引擎不得不多次打开/读取/关闭文件以执行查询。
但是对于流数据湖用例来说,可能每次都只会写入很少的数据,如果不进行特殊处理,这可能会导致大量小文件。
写期间VS写入后小文件优化
常见解决小文件的方法是写的时候就产生了大量小文件,事后再把这些文件合并到一起可以解决小文件带来的系统可扩展性问题;但是可能会影响查询的 SLA,因为我们把很多小文件暴露给它们。实际上,我们可以利用 Hudi 的 clustering 操作很轻松的实现小文件合并,关于 Hudi 的 clustering 我们后面专门开文章介绍。
在进行insert/upsert操作时,Hudi可以指定文件大小。
核心配置
为了便于说明,本文只考虑 COPY_ON_WRITE 表的小文件自动合并功能。在阅读下文之前,我们先来看看几个相关的参数:
hoodie.parquet.max.file.size
:数据文件的最大大小。Hudi 会尝试将文件大小保持在此配置值;hoodie.parquet.small.file.limit
:文件大小小于这个配置值的均视为小文件;hoodie.copyonwrite.insert.split.size
:单分区插入的数据条数,这个值应该和单个文件的记录条数相同。可以根据 hoodie.parquet.max.file.size 和单条记录的大小进行调整。
例如,如果你的第一个配置值是120MB,第二个配置值是100MB,那么任何小于100M