背景
Flink 1.11 引入了写Hive的功能后,已经在上线了一段时间。下面就聊聊我自己对Flink 写Hive 小文件的一些问题和看法。
问题1:
1.Flink 写 Hive 可能会产生小文件吗?
简单的说,答案是会。
简单总结下Flink 读kafka写Hive的流程
1.Flink 将kafka数据根据设置的分区策略,实时写入对应分区hdfs 目录的临时文件 inprogress,如下图所示。

在inprogress文件的数据,通过hive是无法查询到的。
2.打checkpoint时,将inprogress文件的数据刷到正式文件中,并提交kafka offset。
这里有一个关键的点:Flink中一个写hive的并行度,同一时间只能写一个hdfs文件
那么就有一个问题,如果我设置3个并行度,一个checkpoint周期是不是会生成3个文件呢?
这里有一个关键的参数:'sink.shuffle-by-partition.enable'
以上图hive表为例,一级分区为年月日,二级分区为小时,按照数据的event时间分区。

本文探讨了Flink 1.11及后续版本写入Hive时可能出现的小文件问题,分析了'sink.shuffle-by-partition.enable'参数对文件生成的影响,并提供了减少小文件的策略,包括设置该参数为true、使用Flink 1.12的小文件合并功能、调整checkpoint周期以及定期合并小文件。
最低0.47元/天 解锁文章
1634

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



