背景
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时间分区。