zoukankan      html  css  js  c++  java
  • spark sql/hive小文件问题

    针对hive on mapreduce
    1:我们可以通过一些配置项来使Hive在执行结束后对结果文件进行合并:
    参数详细内容可参考官网:https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties
    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
    2:如果结果表使用了压缩格式,则必须配合Sequence File来存储,否则无法进行合并
    3:Hadoop的归档文件格式也是解决小文件问题的方式之一。而且Hive提供了原生支持,如果使用的不是分区表,则可创建成外部表,并使用har://协议来指定路径
    4:对于通常的应用,使用Hive结果合并就能达到很好的效果。如果不想因此增加运行时间,可以自行编写一些脚本,在系统空闲时对分区内的文件进行合并,也能达到目的。
    5:Reducer数量的减少也即意味着结果文件的减少,从而解决产生小文件的问题。
     
    但是,对于通过sparksql来处理数据的话,在conf里添加上面参数调整是没有作用的,不过可以通过下面的方式来规避小文件:
    1.通过使用repartition重分区动态调整文件输出个数
      比如 spark.sql("sql").repartition(1).write().mode(SaveMode.Overwrite).saveAsTable("test");
    2.使用Adaptive Execution动态设置shuffle partition
     
    		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数量,详细可见 上一篇文章

     
  • 相关阅读:
    Codeforces 876C Classroom Watch:枚举
    Codeforces 876B Divisiblity of Differences:数学【任意两数之差为k的倍数】
    BZOJ 3943 [Usaco2015 Feb]SuperBull:最大生成树
    BZOJ 3391 [Usaco2004 Dec]Tree Cutting网络破坏:dfs【无根树 节点分枝子树大小】
    markdown常用数学符号小结
    BZOJ3211花神游历各国-线段树&树状数组-(HDU4027同类型)
    一维二维树状数组写法总结
    hdu4352-XHXJ's LIS状压DP+数位DP
    常用Git命令以及出现的状况ing
    bitset简单用法
  • 原文地址:https://www.cnblogs.com/zz-ksw/p/11293891.html
Copyright © 2011-2022 走看看