大数据平台小文件解决办法

1. 背景

平时只是在大数据平台上写 sparksql 不关注大数据平台文件,今天看了下,发现每个表对应hdfs上的文件数量很对,而且大小不一在这里插入图片描述我们知道这有两个影响:

  1. 文件数量越多,查询扫描的效率越低
  2. 文件大小不一,会导致数据倾斜,降低查询效率

所以小文件越来越多的问题,急需解决

2.解决办法

由于我是采用写sparksql的方式生成这些表数据的,所以解决办法也是针对sql脚本的,如果是spark程序也是类似

针对两个影响
1)第一拳,减少小文件数量

set spark.sql.shuffle.partitions = 8;

设置partitions数量,指定生成文件数,就不会导致文件生成过多了

  1. 第二拳,平衡各个文件之间的大小,解决数据倾斜
insert overwrite table t_table_target 
select * from t_table_source 
distribute by rand();

在生成这个表的查询语句最后增加 distribute by rand() 这样就可以平均每个文件的大小

这样通过上述组合拳就能解决大数据平台的小文件问题
建议:这样的参数和写法应该纳入sql的编写规范中,良好的代码规范,是保证平台稳定长期运行的良方

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐