一、hive小文件

Hive的数据存储在HDFS,它对大文件的处理是非常高效的,如果合理配置文件系统的块大小,NameNode可以支持很大的数据量。HDFS主要分为NameNode,DataNode,ZKFC。
       简单来说,HDFS数据的文件元信息,包括位置、大小、分块信息等,都是保存在NameNode的内存中的。每个对象大约占用150个字节,因此一千万个文件及分块就会占用约3G的内存空间(每个小文件都会占用NameNode模块的存储资源),一旦接近这个量级,NameNode的性能就会开始下降了。此外,HDFS读写小文件时也会更加耗时,因为每次都需要从NameNode获取元信息,并与对应的DataNode建立连接。对于MapReduce程序来说,小文件还会增加Mapper的个数,每个脚本只处理很少的数据,浪费了大量的调度时间。当然这个问题可以通过使用CombinedInputFile和JVM重用来解决。

二、小文件的产生:

2.1、动态分区插入数据的时候,会产生大量的小文件(动态分区产生小文件原因:在一段sql中指定两个字段当动态分区,一个字段的基数为7,另一个为4,这就是28个分区,数据插入动态分区阶段只有map任务,假如有4000个map,这种情况下map任务在往hive分区中写的时候,每个map几乎都要产生28个文件,这样就会产生4000*28个文件,带来大量的小文件);
2.2、数据源本身就包含有大量的小文件;
2.3、Reduce数量的增加,即意味结果文件的增加,从而产生小文件的问题。

三、小文件的影响:

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

四、小文件的解决方案:

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

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

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

1)使用Hadoop archive把小文件进行归档

Hadoop的归档文件格式也是解决小文件问题的方式之一。而且Hive提供了原生支持:

set hive.archive.enabled=true;
set hive.archive.har.parentdir.settable=true;
set har.partfile.size=1099511627776;
alter table srcpart archive partition(ds='2008-04-08', hr='12');
alter table srcpart unarchive partition(ds='2008-04-08', hr='12');

如果使用的不是分区表,则可创建成外部表,并使用har://协议来指定路径。

2)HDFS Federation

Hadoop V2引入了HDFS Federation的概念
实则是将NameNode做了拆分,从而增强了它的扩展性,小文件的问题也能够得到缓解。

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

3)通过参数调节,设置map/reduce的数量,对于通常的应用,使用Hive结果合并就能达到很好的效果。

设置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*100;
//当输出文件的平均大小小于该值时,启动一个独立的MapReduce任务进行文件merge。
set hive.merge.smallfiles.avgsize=16000000;

hive优化处理大量小文件相关推荐

  1. Hadoop之Hadoop企业优化(HDFS小文件优化)

    Hadoop之Hadoop企业优化 目录 MapReduce 跑的慢的原因 MapReduce优化方法之数据输入 MapReduce优化方法之Map阶段 MapReduce优化方法之Reduce阶段 ...

  2. hive与spark合并小文件,将大文件打碎成小文件

    场景一:将小文件合并成大文件. mro_hour_test表每个分区有几千个1m未压缩小文件, 以下语句是将几千个文件在输入时(map阶段)合并成150M一个的文件,插入到mro_hour_test_ ...

  3. 代达罗斯之殇-大数据领域小文件问题解决攻略

    : 点击上方蓝色字体,选择"设为星标" 回复"资源"获取更多惊喜 大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 大数据真好玩 点击右侧关注,大数据 ...

  4. 大数据开发之Hive优化篇8-Hive Job优化

    备注: Hive 版本 2.1.1 文章目录 Hive job优化概述 一.并行执行 二.本地执行 三.合并输入小文件 四.合并输出小文件 五.控制Map/Reduce数 5.1 控制Hive job ...

  5. HDFS小文件治理总结

    目录 背景 第一部分 回本溯源 第二部分 HDFS大量小文件的危害 第三部分 小文件治理方案总结 第四部分 总结 参考文献及资料 背景 企业级Hadoop大数据平台在实际使用过程中,可能大部分会遭遇小 ...

  6. Hive insert into小文件问题优化解决

    Hive insert into小文件问题优化解决 insert into table hhl values ('1','11'); insert into table hhl values ('1' ...

  7. HIVE优化系列(1)-- 自动合并输出的小文件

    小文件的缺陷我们就不说了,直接进入到正题. HIVE自动合并输出的小文件的主要优化手段为: set hive.merge.mapfiles = true:在只有map的作业结束时合并小文件, set ...

  8. Hive Distribute by 应用之动态分区小文件过多问题优化

    目录 0 问题现象及原因分析 1 问题解决 解决办法 2 由以上问题引出的问题 3 思考 4 小结 0 问题现象及原因分析 现象: [Error 20004]: Fatal error occurre ...

  9. exists hive中如何使用_07045.16.2如何使用Hive合并小文件

    问题背景 目前集群存于一个非常不健康的状态,主要问题是小文件太多,单个DataNode的block数量阈值是500,000,而现在单个DataNode的block为2,631,218,约为阈值的5倍, ...

最新文章

  1. 不管走多远,不要忘记停下来想想当初为何出发
  2. afn原理 ios_iOS开发:AFN的基本使用
  3. hibernate中inverse作用
  4. 原来BCH是这样转给别人的
  5. 深入理解Spark 2.1 Core (八):Standalone模式容错及HA的原理与源码分析
  6. linux检查磁盘空间使用情况df 命令
  7. Java虚拟机(七)——本地方法接口与本地方法栈
  8. 如何系统的自学python-自学Python应该如何正确系统学习,避免少走弯路
  9. 安卓系统组态软件_力臻智合分布式组态软件安卓版解决方案
  10. java计算机毕业设计足球队管理系统源码+数据库+系统+lw文档+mybatis+运行部署
  11. dep指定版本 go_Golang官方依赖管理工具:dep
  12. Linux vmwaver下安装cenos联网时出现 network is unreachable问题
  13. 键盘是计算机最常用的输入设备之一
  14. 鸟哥Linux学习之——数据流重定向
  15. VUE环境搭建和项目创建-win平台
  16. 苹果推出iOS15.2正式版,“数字遗产”计划正式上线,你的“继承人”是谁?
  17. 群晖216j使用web station部署librespeed下载无速度的解决方法
  18. Biorhythms(信息学奥赛一本通 1639)
  19. 作为建筑设计师,这8款渲染软件一定要知道
  20. C语言隐式类型转换(字符类型以及短整型的运算规则)

热门文章

  1. mysql分区表详解_详解MySQL分区表
  2. mysql5.7 分区表_mysql分区表学习
  3. 关于如何设置IDEA自动刷新项目目录
  4. Tusimple数据集生成二值化和实例化图片
  5. deconv 函数介绍
  6. C++ 性能分析工具调研
  7. 考研时间查询时间,已经出炉啦
  8. 量化投资-基本面组合-10大基本面策略的简单组合
  9. 易懂的数组作为函数参数(C语言)
  10. 《庄子·外篇·在宥第十一》