• Hive merge(小文件合并)


    当Hive的输入由非常多个小文件组成时。假设不涉及文件合并的话。那么每一个小文件都会启动一个map task。
    假设文件过小。以至于map任务启动和初始化的时间大于逻辑处理的时间,会造成资源浪费。甚至发生OutOfMemoryError错误。


    因此,当我们启动一个任务时,假设发现输入数据量小但任务数量多时。须要注意在Map前端进行输入小文件合并操作。
    同理。向一个表写数据时,注意观察reduce数量。注意输出文件大小。


    1、 Map输入小文件合并
    #每一个Map处理的最大输入文件大小(256MB)
    set mapred.max.split.size=256000000;  
    #一个节点上split文件的最小值
    set mapred.min.split.size.per.node=100000000; 
    #一个交换机下split文件的最小值
    set mapred.min.split.size.per.rack=100000000; 
    #运行Map前进行小文件合并
    set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;  

    在开启了org.apache.hadoop.hive.ql.io.CombineHiveInputFormat 后,
    一个data node节点上多个小文件会进行合并。合并文件数由mapred.max.split.size限制的大小决定。


    mapred.min.split.size.per.node决定了多个data node上的文件是否须要合并
    mapred.min.split.size.per.rack决定了多个交换机上的文件是否须要合并

    2、输出文件合并
    #在Map-Only的任务结束时就会合并小文件
    set hive.merge.mapfiles = true;
    #在MapR-educe的任务结束时合并小文件
    set hive.merge.mapredfiles = true;(默觉得false)
    #合并文件的大小
    set hive.merge.size.per.task = 256*1000*1000;
    #当输出文件的平均大小小于该值时。启动一个独立的map-reduce任务进行文件merge
    set hive.merge.smallfiles.avgsize=16000000 ;

  • 相关阅读:
    从Python到Web开发
    源码安装缺少configure文件
    5
    4
    3
    2
    42
    1
    18
    41
  • 原文地址:https://www.cnblogs.com/llguanli/p/6853142.html
Copyright © 2020-2023  润新知