hadoop多文件输出

标签: hadoop 文件 | 发表时间:2014-11-20 19:23 | 作者:qingmu0803
出处:http://blog.csdn.net

现实环境中,常常遇到一个问题就是想使用多个Reduce,但是迫于setup和cleanup在每一个Reduce中会调用一次,只能设置一个Reduce,无法是实现负载均衡。

问题,如果要在reduce中输出两种文件,一种是标志,另一种是正常业务数据,实现方案有三种:

(1)设置一个reduce,在reduce中将数据封装到一个集合中,在cleanup中将数据写入到hdfs中,但是如果数据量巨大,一个reduce无法充分利用资源,实现负载均衡,但是如果数据量较小,可以使用

(2)设置多文件输出,使用MultipleOutputs类

具体见代码:

private MultipleOutputs mos; 

@Override 
protected void setup(Context context) 
throws IOException, InterruptedException { 
  mos=new MultipleOutputs(context);
} 
@Override 
protected void reduce(Text key, Iterable<Text> values, Context context) 
throws IOException, InterruptedException { 

String key1=key.toString(); 
for(Text t:values){ 
   if(key1.equals("a")){ 
   mos.write("a", key,t); 
   } else if(key1.equals("b")){ 
   mos.write("b", key,t);    
   } else if(key1.equals("c")){ 
   mos.write("c", key,t); 
   
   } 
 } 
} 
@Override 
protected void cleanup( 
Context context) 
throws IOException, InterruptedException { 
mos.close();
} 
main方法中配置
<pre name="code" class="java">MultipleOutputs.addNamedOutput(job, "a", TextOutputFormat.class, Text.class, Text.class);
MultipleOutputs.addNamedOutput(job, "b", TextOutputFormat.class, Text.class, Text.class);
MultipleOutputs.addNamedOutput(job, "c", TextOutputFormat.class, Text.class, Text.class);



 
结果文件为  a-r-0000,b-r-0000,c-r-0000,part-r-0000
(3)第三种方案是自己实现多文件输出

详见http://blog.csdn.net/qingmu0803/article/details/39665407

作者:qingmu0803 发表于2014-11-20 11:23:24 原文链接
阅读:84 评论:0 查看评论

相关 [hadoop 文件] 推荐:

hadoop多文件输出

- - CSDN博客云计算推荐文章
现实环境中,常常遇到一个问题就是想使用多个Reduce,但是迫于setup和cleanup在每一个Reduce中会调用一次,只能设置一个Reduce,无法是实现负载均衡. 问题,如果要在reduce中输出两种文件,一种是标志,另一种是正常业务数据,实现方案有三种:. (1)设置一个reduce,在reduce中将数据封装到一个集合中,在cleanup中将数据写入到hdfs中,但是如果数据量巨大,一个reduce无法充分利用资源,实现负载均衡,但是如果数据量较小,可以使用.

hadoop多文件格式输入

- - CSDN博客云计算推荐文章
hadoop多文件格式输入,一般可以使用MultipleInputs类指定不同的输入文件路径以及输入文件格式. 现在需要把user和phone按照phone number连接起来,得到下面的结果:. 那么就可以使用MultipleInputs来操作,这里把user和phone上传到hdfs目录中,分别是/multiple/user/user , /multiple/phone/phone.

hadoop 处理不同的输入文件,文件关联

- - CSDN博客云计算推荐文章
file1和file2进行关联,想要的结果:. 2、将file1的key、value颠倒 ;file1和file2的key相同,file1的value做key,file2的value做value ,输出. if("file1".equals(fileName)){//加标记. // 设置Map和Reduce处理类.

用Hadoop AVRO进行大量小文件的处理

- - CSDN博客云计算推荐文章
使用 使用使用 使用 HDFS 保存大量小文件的缺点:. 1.Hadoop NameNode 在内存中保存所有文件的“元信息”数据. 据统计,每一个文件需要消耗 NameNode600 字节内存. 如果需要保存大量的小文件会对NameNode 造成极大的压力. 2.如果采用 Hadoop MapReduce 进行小文件的处理,那么 Mapper 的个数就会跟小文件的个数成线性相关(备注:FileInputFormat 默认只对大于 HDFS Block Size的文件进行划分).

hadoop集群调优-OS和文件系统部分

- - 开源软件 - ITeye博客
根据Dell(因为我们的硬件采用dell的方案)关于hadoop调优的相关说明,改变几个Linux的默认设置,Hadoop的性能能够增长大概15%. 文件描述符是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表. 当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符.

Hadoop 归档 和HIVE 如何使用har 归档 文件

- - CSDN博客云计算推荐文章
但对于MapReduce 来说起不到任何作用,因为har文件就相当一个目录,仍然不能讲小文件合并到一个split中去,一个小文件一个split ,任然是低效的,这里要说一点<>对这个翻译有问题,上面说可以分配到一个split中去,但是低效的.      既然有优势自然也有劣势,这里不说它的不足之处,仅介绍如果使用har 并在hadoop中更好的使用har 文件.

大数据-Hadoop小文件问题解决方案

- - IT瘾-geek
HDFS中小文件是指文件size小于HDFS上block(. dfs.block.size)大小的文件. 大量的小文件会给Hadoop的扩展性和性能带来严重的影响. 动态分区插入数据,产生大量的小文件,从而导致map数量剧增. reduce数量越多,小文件也越多,reduce的个数和输出文件个数一致.

[原]基于hadoop搜索引擎实践——二级索引文件(五)

- - long1657的专栏
基于hadoop搜索引擎——二级索引文件.     一般生成的倒排表文件会比源文件暂用空间大,主要是倒排表文件所记录的信息比较详细. 它记录了所有的索引词记录(TERM_RECORD)信息,对于常见的关键词(TERM),其MULTI_INFO可能包含几万甚至几十万个SINGLE_INFO..     由于倒排表文件很大.

Hadoop分布式文件系统HDFS和OpenStack对象存储系统Swift有何不同?

- - ITeye博客
HDFS使用 集中式单一节点架构(NameNode)来维护文件系统元数据,而在Swift中,元数据 分布在整个集群中并拥有多个副本. 注意:集中式元数据存储使HDFS存在单点故障和扩展性问题,因此规模越大就性能越低,就越难扩展甚至不能扩展,所幸的是HDFS2使用NameNode HA和HDFS Federation解决了这两个问题.

比较Apache Hadoop 生态系统中不同的文件格式和存储引擎的性能

- - IT瘾-bigdata
这篇文章提出了在Apache Hadoop 生态系统中对比一些当前流行的数据格式和可用的存储引擎的性能:Apache Avro, Apache Parquet, Apache HBase 和 Apache Kudu 空间效率, 提取性能, 分析扫描以及随机数据查找等领域. 这有助于理解它们中的每一个如何(何时)改善你的大数据工作负载的处理能力.