Hive 合并输入输出文件

如果HIVE的输入文件是大量的小文件,而每个文件启动一个map的话是对yarn资源的浪费,同样的,Hive输出的文件也远远小于HDFS块大小,对后续处理也是不利的

HIVE中支持通过参数调整输入和输出的文件大小

1、合并输入文件

set mapred.max.split.size=256000000;  #每个Map最大输入大小

set mapred.min.split.size.per.node=100000000; #一个节点上split的至少的大小

set mapred.min.split.size.per.rack=100000000; #一个交换机下split的至少的大小

set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;  #执行Map前进行小文件合并

开启org.apache.hadoop.hive.ql.io.CombineHiveInputFormat后,一个data node节点上多个小文件会进行合并,合并文件数由mapred.max.split.size限制的大小决定

mapred.min.split.size.per.node决定了多个data node上的文件是否需要合并

mapred.min.split.size.per.rack决定了多个交换机上的文件是否需要合并

2、合并输出文件

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

时间: 2024-10-10 13:33:02

Hive 合并输入输出文件的相关文章

关于动态内存和输入输出文件

最近和师兄的课题交流,特别是这两天重点集中到实践上.动态分配存储空间和输入输出文件无疑是非常重要的. 这里仍记录以下今天借阅的这本C++给出的一些例子: 动态内存的模拟 struct memo{ int start; int finish; memo* next; }; void arrange(memo* memo) { memo* insPos = head, *curPos, *minPos; while(insPos->next != NULL){ //直接插入排序 curPos = m

Hive之小文件问题及其解决方案

小文件如何产生 1.动态分区插入数据,产生大量小文件,导致map数剧增 2.Reduce数越多,小文件越多 3.数据直接导入小文件 小文件的影响 从hive的角度看,小文件会开很多map,一个map开一个jvm去执行,所以这些任务的初始化,启动,执行浪费大量资源,严重影响集群性能 在HDFS中,每个小文件对象越占150byte,如果小文件过多会占用大量内存.这样namenode内存容量严重制约了集群的扩展. 解决思路 使用sequence file作为表的存储格式,不要用TextFile 减少R

hive中控制文件生产个数

在有些时候,想要控制hql执行的mapper,reducer个数,reducer设置过少,会导致每个reducer要处理的数据过多,这样可能会导致OOM异常,如果reducer设置过多,则会导致产生很多小文件,这样对任务的执行以及集群都不太好.通常情况下这两个参数都不需要手动设置,Hive会根据文件的大小和任务的情况自动计算,但是某些特殊情况下可能需要进行调优,下面列举两个常用的调优场景看看这两个参数在调优的时候都是怎么用的: 方法一:设置reducer个数 reducer个数最直接的影响是hq

WholeFileInputFormat 和WholeFileRecordReader合并小文件

如果不希望文件被切分,例如判断文件中记录是否有序,可以让minimumSize值大于最大文件的大小,但是文件的大小不能超过blockSize,或者重写FileInputFormat方法isSplitable()返回为false.下面介绍将多个小文件合成一个大的序列文件的例子: 1)自定义完整文件输入处理类如下: Public class WholeFileInputFormat extends FileInputFormat<NullWritable, ByteWritable> { @ove

Hadoop HDFS编程 API入门系列之合并小文件到HDFS(三)

不多说,直接上代码.  代码 package zhouls.bigdata.myWholeHadoop.HDFS.hdfs7; import java.io.IOException;import java.net.URI;import java.net.URISyntaxException;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FSDataInputStream;import org.apa

Linux下目录的合并以及文件的覆盖

有两个目录test和new,test目录下有目录和文件,new目录下有更改过的一些test下的目录和文件,以及一些新增的文件,现在对两个目录进行合并以及覆盖test下的旧文件. cp -frap new/* test/ 命令其实非常简单,解释下: -f 强制覆盖,不询问yes/no(-i的默认的,即默认为交互模式,询问是否覆盖)-r 递归复制,包含目录-a 做一个备份,这里可以不用这个参数,我们可以先备份整个test目录-p 保持新文件的属性不变 记住一点就是,实现合并和覆盖是用cp,而不是mv

[转载]mapreduce合并小文件成sequencefile

mapreduce合并小文件成sequencefile http://blog.csdn.net/xiao_jun_0820/article/details/42747537

获取google翻译的音频文件_合并音频文件的方法

1. 把引文输入google 翻译,然后点击“朗读” 2. 按下F12键,打开也变调试窗口,在网络标签页中,算中“媒体”列表,删选出媒体文件如下: 3. 获取音频文件 选中请求网址,复制网址,在浏览器中黏贴,访问 右键弹出菜单中,选中“另存为”,即可获取“音频文件” 4. 合并音频文件片段 因为google翻译,会截取翻译的段落为一段一段,所以获取的翻译文件也是一段一段的. 分别下载后,并按照顺序明明每个音频文件. 如文件 0001.MP3, 0002.mp3, 0003.MP3 算中第一个文件

matlab批量合并txt文件

1: %% merge.m 2: %%%%Main程序%%%%%% 3: %%%%%% 4: %%%%%%本程序合并完各个子文件夹中的txt到主文件目录下,并且合并的文件以子文件夹名字命名 5: %%%%%%同时,每次合并时,如果主文件夹已存在某一个子文件夹名字A的txt文件,那么此次合并,将把当前 6: %%%%%%这个子文件夹A中所有的txt文件追加到子文件夹A.txt文件的末尾处. 7: clear; 8: clc; 9: % MainFolder='D:\Master-FTP\磁流变阻尼