hive优化处理大量小文件
一、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优化处理大量小文件相关推荐
- Hadoop之Hadoop企业优化(HDFS小文件优化)
Hadoop之Hadoop企业优化 目录 MapReduce 跑的慢的原因 MapReduce优化方法之数据输入 MapReduce优化方法之Map阶段 MapReduce优化方法之Reduce阶段 ...
- hive与spark合并小文件,将大文件打碎成小文件
场景一:将小文件合并成大文件. mro_hour_test表每个分区有几千个1m未压缩小文件, 以下语句是将几千个文件在输入时(map阶段)合并成150M一个的文件,插入到mro_hour_test_ ...
- 代达罗斯之殇-大数据领域小文件问题解决攻略
: 点击上方蓝色字体,选择"设为星标" 回复"资源"获取更多惊喜 大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 大数据真好玩 点击右侧关注,大数据 ...
- 大数据开发之Hive优化篇8-Hive Job优化
备注: Hive 版本 2.1.1 文章目录 Hive job优化概述 一.并行执行 二.本地执行 三.合并输入小文件 四.合并输出小文件 五.控制Map/Reduce数 5.1 控制Hive job ...
- HDFS小文件治理总结
目录 背景 第一部分 回本溯源 第二部分 HDFS大量小文件的危害 第三部分 小文件治理方案总结 第四部分 总结 参考文献及资料 背景 企业级Hadoop大数据平台在实际使用过程中,可能大部分会遭遇小 ...
- Hive insert into小文件问题优化解决
Hive insert into小文件问题优化解决 insert into table hhl values ('1','11'); insert into table hhl values ('1' ...
- HIVE优化系列(1)-- 自动合并输出的小文件
小文件的缺陷我们就不说了,直接进入到正题. HIVE自动合并输出的小文件的主要优化手段为: set hive.merge.mapfiles = true:在只有map的作业结束时合并小文件, set ...
- Hive Distribute by 应用之动态分区小文件过多问题优化
目录 0 问题现象及原因分析 1 问题解决 解决办法 2 由以上问题引出的问题 3 思考 4 小结 0 问题现象及原因分析 现象: [Error 20004]: Fatal error occurre ...
- exists hive中如何使用_07045.16.2如何使用Hive合并小文件
问题背景 目前集群存于一个非常不健康的状态,主要问题是小文件太多,单个DataNode的block数量阈值是500,000,而现在单个DataNode的block为2,631,218,约为阈值的5倍, ...
最新文章
- 面试必问:十大经典排序算法总结
- mongoudb 等于_MongoDB常用操作
- 为什么需要架构图,怎么画?
- 极寒极热天气是否可以使用福禄克DSX2-5000网线测试仪工作
- Java历经20年沧桑,将持续革新
- IIS配置教程。。。。。
- mysql repos_mysql yum源安装
- OLTP和OLAP的区别
- ubuntu 10.04 虚拟机建立tftp服务器
- 百度AI语音语义一体化技术 识别的同时进行语义分析
- Android应用程序开发
- Spring中AOP的实现原理
- 阿里巴巴2021校招
- 电压暂降求交流,加Q
- Java学习Day_11
- 应用性能管理APM巅峰对决:skywalking P.K. Pinpoint
- 疫情引发橡胶产业市场动荡,企业如何重构供应生态打破劣局?
- 蒙特梭利素材-【数字海报】蒙氏素材
- 线程操作:冻结与解冻线程
- 鸿蒙系统操作界面跟苹果很像,鸿蒙界面提前“泄密”,安卓和苹果的结合体,但内核已经换了!...
热门文章
- html 定义函数调用函数,HTML function函数怎么定义和调用?
- Mysql数据库性能调优面试大全经典分析
- 青少年信息学(计算机)奥林匹克,全国青少年信息学(计算机)奥林匹克竞赛及分区联赛说明...
- python解码unicode_Python 解码 Unicode 转义字符串
- python vs Java(谁更胜一筹)
- js输出的三种方式:页面输出、对话框输出、控制台输出
- MES生产调度任务模型
- 记第一次组装台式电脑电源的小插曲附电源线接口汇总
- 常见的25种正则校验
- C语言执行效率如何保证,看这一文就够了!