hive on spark 小文件问题
问题描述
创建hive外部表后,通过insert语句(其中包含了group by)向其中插入数据,会在hdfs外部表指定的location下面生成200个小文件。
原因分析
因为Spark中当通过列来进行分区时,会默认生成200个partitions,每个partition对应一个小文件,此时大部分的partition中其实是没有数据的,这会造成资源的浪费,我们只要指定以下partition的数量就可以了,可以通过dataframe的repartiton()和coalesce()实现,一般个位数即可。
关于repartition和coalesce的概念以及区别可以参考https://hackernoon.com/managing-spark-partitions-with-coalesce-and-repartition-4050c57ad5c4(需翻墙)