zoukankan      html  css  js  c++  java
  • Hive小文件处理

    小文件是如何产生的:

    1. 动态分区插入数据的时候,会产生大量的小文件,从而导致map数量的暴增
    2. 数据源本身就包含有大量的小文件
    3. reduce个数越多,生成的小文件也越多

    小文件的危害:

    1. 从HIVE角度来看的话呢,小文件越多,map的个数也会越多,每一个map都会开启一个JVM虚拟机,每个虚拟机都要创建任务,执行任务,这些流程都会造成大量的资源浪费,严重影响性能
    2. 在HDFS中,每个小文件约占150byte,如果小文件过多则会占用大量的内存。这样namenode内存容量严重制约了集群的发展

    小文件的解决方案

    从小文件的产生途径解决:

    1. 使用sequencefile作为表存储形式,不要使用textfile,在一定程度上可以减少小文件
    2. 减少reduce的个数(减少生成分区数量)
    3. 少用动态分区,使用distribute by分区

    对已经存在的小文件做出的解决方案:

    1. 使用Hadoop achieve把小文件进行归档

    2. 重建表,建表时减少reduce的数量

    3. 通过参数调节,设置map/reduce的数量

    设置map输入合并小文件的相关参数:

    //每个Map最大输入大小(这个值决定了合并后文件的数量)
    set mapred.max.split.size=256000000;  
    //一个节点上split的至少的大小(这个值决定了多个DataNode上的文件是否需要合并)
    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;
      • 设置map输出和reduce输出进行合并的相关参数:

    //设置map端输出进行合并,默认为true
    set hive.merge.mapfiles = true
    //设置reduce端输出进行合并,默认为false
    set hive.merge.mapredfiles = true
    //设置合并文件的大小
    set hive.merge.size.per.task = 256*1000*1000
    //当输出文件的平均大小小于该值时,启动一个独立的MapReduce任务进行文件merge。
    set hive.merge.smallfiles.avgsize=16000000
  • 相关阅读:
    网页中 弹出提示框
    三级联动
    pdo预处理
    ajax返回数据类型 text json xml
    PHP语言 -- 数据访问 好友列表
    2.17 牛牛你个渣渣这种题都做不出来 尹老师教你的你全还给他了吗?
    1.25 作业
    1.22作业
    1.20 作业
    js 学习笔记
  • 原文地址:https://www.cnblogs.com/30go/p/11062848.html
Copyright © 2011-2022 走看看