美文网首页大数据大数据
大数据开发:Hive小文件合并

大数据开发:Hive小文件合并

作者: 成都加米谷大数据 | 来源:发表于2020-12-30 18:01 被阅读0次

Hadoop生态技术体系下,负责大数据存储管理的组件,涉及到HDFS、Hive、Hbase等。Hive作为数据仓库工具,最初的存储还是落地到HDFS上,这其中就有一个关键的环节,是小文件的处理。今天的大数据开发分享,我们就主要来讲讲,Hive小文件合并。

本身来说,由于Hadoop的特性,对大文件的处理非常高效。大文件可以减少文件元数据信息,减轻NameNode的存储压力。相对于上层的数据表汇总程度高,底层就会面临小文件越来越多的问题。

一、小文件带来的问题

HDFS的文件包好数据块和元信息,其中元信息包括位置、大小、分块等信息,都保存在NameNode的内存中。每个对象大约占用150个字节,因此一千万文件及分块就会占用约3G的内存空间,一旦接近这个量级,NameNode的性能就会开始下降。

HDFS读写小文件时也会更加耗时,因为每次都需要从NameNode获取元信息,并且对应的DataNode建立连接。对于MapReduce程序来说,小文件会增加Mapper的数量,每个Map任务只会处理很少的数据,浪费大量的调度时间。

二、Hive小文件产生的原因

一方面hive数据仓库中汇总表的数据量通常比源数据少的多,而且为了提升运算速度,我们会增加Reduce的数量,Hive本身也会做类似的优化——Reducer数量等于源数据的量除以hive.exec.reducers.bytes.per.reduce所配置的量(默认1G)。Reduce数量的增加也即意味着结果文件的增加,从而产生小文件的问题。

解决小文件的问题可以从两个方向入手:

①输入合并。即在map前合并小文件。

②输出合并。即在输出结果的时候合并小文件。

三、配置Map输入合并

--每个Map最大输入大小,决定合并后的文件数

set mapred.max.split.size=256000000;

--一个节点上split的至少的大小,决定了多个data node上的文件是否需要合并

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;

四、配置hive结果合并

通过设置hive的配置项在执行结束后对结果文件进行合并:

set hive.merge.mapfiles=true#在Map-only的任务结束时合并小文件

set hive.merge.mapredfiles=true#在Map-Reduce的任务结束时合并小文件

set hive.merge.size.per.task=256*1000*1000#合并文件的大小

set hive.merge.smallfiles.avgsize=16000000#当输出文件的平均大小小于该值时,启动一个独立的map-reduce任务进行文件merge

hive在对结果文件进行合并时会执行一个额外的map-only脚本,mapper的数量是文件总大小除以size.per.task参数所得的值,触发合并的条件是:根据查询类型不同,相应的mapfiles/mapredfiles参数需要打开;结果文件的平均大小需要大于avgsize参数的值。

关于大数据开发,Hive小文件合并,以上就为大家做了大致的介绍了。小文件合并的问题,这里提供了两种思路去解决,具体的实施就要结合到应用场景去选择了。

相关文章

  • 大数据开发:Hive小文件合并

    Hadoop生态技术体系下,负责大数据存储管理的组件,涉及到HDFS、Hive、Hbase等。Hive作为数据仓库...

  • HIVE:小文件合并

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

  • hive合并小文件

    参考资料:https://blog.csdn.net/lalaguozhe/article/details/905...

  • Spark 处理小文件

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

  • Hive碎碎念(9):HIVE前缀

    转载请在文章起始处注明出处,谢谢。 --1、配置MR任务结束后进行文件合并(合并小文件) set hive.mer...

  • Hive小文件合并迁移

    1 需求 Hive数据库内有4张表,每张表有1TB左右数据,按天分区,需要将这4张表的数据迁移到另一个集群。因为...

  • hive小文件合并问题

    背景 Hivequery将运算好的数据写回hdfs(比如insert into语句),有时候会产生大量的小文件,如...

  • Hadoop优化

    1.数据输入小文件处理a.合并小文件:对小文件进行归档、自定义inputFormat将小文件存储成sequence...

  • 大数据面试 | 07 从这5个方面入手,回答好Hadoop 优

    Hadoop 优化 (记住6条-10条即可) 1)数据输入小文件处理: 合并小文件:对小文件进行归档(har)、自...

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

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

网友评论

    本文标题:大数据开发:Hive小文件合并

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