美文网首页
Hive如何处理大量小文件

Hive如何处理大量小文件

作者: liuzx32 | 来源:发表于2020-07-20 13:53 被阅读0次

小文件是如何产生的

  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
      

相关文章

  • Hive如何处理大量小文件

    小文件是如何产生的 动态分区插入数据的时候,会产生大量的小文件,从而导致map数量的暴增 数据源本身就包含有大量的...

  • Hive和Spark当中对小文件的处理

    Hive当中对小文件的处理 数仓面试高频考点:【在Hive中如何解析小文件过多问题,指定的是:处理表中数据时,有很...

  • Hive On Spark小文件处理

    什么是小文件 Spark官方的推荐文档中,parquet格式的文件的推荐大小是128M,小于该值的文件均可以称为小...

  • MapReduce 基础 (八)自定义InputFormat

    无论HDFS还是MapReduce,在处理小文件时效率都非常低,但又难免面临处理大量小文件的场景,此时,就需要有相...

  • Hadoop HDFS处理大量的小文件

    小文件是指文件大小明显小于HDFS上块(block)大小(默认64MB)的文件。如果存储小文件,必定会有大量这样的...

  • hive on spark 小文件问题

    hive on spark 小文件问题 问题描述 创建hive外部表后,通过insert语句(其中包含了group...

  • Spark 处理小文件

    1. 小文件合并综述 1.1 小文件表现 不论是Hive还是Spark SQL在使用过程中都可能会遇到小文件过多的...

  • [译]Hive学习指南(一)

    Hive是什么 Hive是基于Apache Hadoop的数据仓库。Hadoop提供了在商用硬件上存储和处理大量数...

  • spark 离线任务对于小文件的处理

    前言 spark 读写hive 比较多,发现总是有小文件很多,几百个几十KB的文件,这样对于后续处理很不友好,这里...

  • HIVE:小文件合并

    HDFS非常容易存储大数据文件,如果Hive中存在过多的小文件会给namecode带来巨大的性能压力。同时小文件过...

网友评论

      本文标题:Hive如何处理大量小文件

      本文链接:https://www.haomeiwen.com/subject/groekktx.html