集群小文件太多问题(spark-sql优化)

hive外部分区表,每个分区下有200个小文件
集群小文件太多问题(spark-sql优化)_第1张图片
某张表有三个分区字段(partition_brand, partition_date, partition_rssc)
则生成小文件个数:2 * 26 * 8 * 200 = 83,200
这个表还算一般,如果按照年月日进行分区的话,小文件就太多了
先查看集群动态资源配置:
集群小文件太多问题(spark-sql优化)_第2张图片
再查看执行spark程序配置资源:

--driver-memory 30g \
--executor-memory 12g \
--num-executors 12 \
--executor-cores 3 \

12executor3个core =36 cores
12executor
12 + 30 =174G

然而是实际运行过程
集群小文件太多问题(spark-sql优化)_第3张图片
看来是集群动态分配资源,然而分配资源对生成文件数并没影响。。
于是查找其它可能原因。

方法一:新增配置信息:

--conf spark.sql.shuffle.partitions=10 \
--conf spark.default.parallelism=10 \

在这里插入图片描述
执行结果ok,但是运行时间增加了10min.
集群小文件太多问题(spark-sql优化)_第4张图片
方法二:repartition函数

   //合并成一个文件
   df.repartition(10).createOrReplaceTempView("table1")
   hiveContext.sql("INSERT overwrite TABLE wd_part_test partition(partition_brand, partition_date, partition_rssc) select * from table1")

执行结果ok,同样运行时间增加了10min.

注:测试采用一年的数据量大约50G(1亿条)

你可能感兴趣的:(spark)