大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说spark sql/hive小文件问题,希望您对编程的造诣更进一步.
1
2
3
4
|
hive.merge.mapfiles 在 map-only job后合并文件,默认 true
hive.merge.mapredfiles 在map-reduce job后合并文件,默认 false
hive.merge.size.per.task 合并后每个文件的大小,默认256000000
hive.merge.smallfiles.avgsize 平均文件大小,是决定是否执行合并操作的阈值,默认16000000
|
set hive.merge.mapfiles = true:在只有map的作业结束时合并小文件, set hive.merge.mapredfiles = true:在Map-Reduce的任务结束时合并小文件,默认为False; set hive.merge.size.per.task = 256000000; 合并后每个文件的大小,默认256000000 set hive.merge.smallfiles.avgsize=256000000; 当输出文件的平均大小小于该值时并且(mapfiles和mapredfiles为true)
代码100分
1
2
3
4
5
6
7
8
9
10
11
12
13
|
SparkConf conf = new SparkConf();
conf.set( "spark.sql.adaptive.enabled" , "true" );
conf.set( "spark.sql.adaptive.shuffle.targetPostShuffleInputSize" , "67108864b" );
conf.set( "spark.sql.adaptive.join.enabled" , "true" );
conf.set( "spark.sql.autoBroadcastJoinThreshold" , "20971520" );
SparkSession spark = SparkSession
.builder()
.appName( "JointSitePlan" )
.master( "local" )
.config(conf)
.enableHiveSupport()
.getOrCreate();
|
shuffle partition是通过参数spark.sql.shuffle.partitions来指定的,默认是200,但是对于数据不大,或者数据倾斜的情况,会生成很多的小文件,几兆甚至几KB大小,自适应执行则会根据参数 spark.sql.adaptive.shuffle.targetPostShuffleInputSize 动态调整reducer数量.
附:
我在spark sql执行insert overwrite操作时,仅加了set spark.sql.hive.mergeFiles=true; 也可以有效阻止小文件的产生,可能是因为我的数据量本身就比较大
参考:
https://www.cnblogs.com/zz-ksw/p/11293891.html
https://blog.csdn.net/a2011480169/article/details/100401858
spark sql/hive小文件问题
原文地址:https://www.cnblogs.com/fnlingnzb-learner/p/13427909.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/6901.html