现实环境中,经常遇到一个问题就是想使用多个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

hadoop多文件输出的更多相关文章

  1. hadoop多文件输出MultipleOutputFormat和MultipleOutputs

    1.MultipleOutputFormat可以将相似的记录输出到相同的数据集.在写每条记录之前,MultipleOutputFormat将调用generateFileNameForKeyValue方 ...

  2. Hadoop 实现多文件输出

    比如word.txt内容如下: aaa bbb aba abc bba bbd bbbc cc ccd cce 要求按单词的首字母区分单词并分文件输出 代码如下: LineRecordWriter p ...

  3. mapreduce多文件输出的两方法

    mapreduce多文件输出的两方法   package duogemap;   import java.io.IOException;   import org.apache.hadoop.conf ...

  4. hadoop streaming 多路输出 [转载]

    转载 http://www.cnblogs.com/shapherd/archive/2012/12/21/2827860.html hadoop 支持reduce多路输出的功能,一个reduce可以 ...

  5. Hadoop基于文件的数据结构及实例

    基于文件的数据结构 两种文件格式: 1.SequenceFile 2.MapFile SequenceFile 1.SequenceFile文件是Hadoop用来存储二进制形式的<key,val ...

  6. MR案例:多文件输出MultipleOutputs

    问题描述:现有 ip-to-hosts.txt 数据文件,文件中每行数据有两个字段:分别是ip地址和该ip地址对应的国家,以'\t'分隔.要求汇总不同国家的IP数,并以国家名为文件名将其输出.解读:M ...

  7. 使用log4j配置不同文件输出不同内容

    敲代码中很不注意写日志,虽然明白很重要.今天碰到记录日志,需要根据内容分别输出到不同的文件. 参考几篇文章: 感觉最详细:http://blog.csdn.net/azheng270/article/ ...

  8. 详解log4j2(下) - Async/MongoDB/Flume Appender 按日志级别区分文件输出

    1. 按日志级别区分文件输出 有些人习惯按日志信息级别输出到不同名称的文件中,如info.log,error.log,warn.log等,在log4j2中可通过配置Filters来实现. 假定需求是把 ...

  9. Hadoop HDFS文件常用操作及注意事项

    Hadoop HDFS文件常用操作及注意事项 1.Copy a file from the local file system to HDFS The srcFile variable needs t ...

随机推荐

  1. .NET基础拾遗(3)字符串、集合和流1

    一.字符串处理 1.1 StringBuilder类型 众所周知,在.NET中String是引用类型,具有不可变性,当一个String对象被修改.插入.连接.截断时,新的String对象就将被分配,这 ...

  2. css实现两端对齐~

    今天做表单时遇到让上下两个字段对齐的情况,手机号码.用户名. 然后今天在网上找了找相关方法,发现确实是没有什么好的方法解决,特别是当需要兼容的时候.找到了两个我觉得相对还不错的方法: 方法一.是在司徒 ...

  3. 传感器仿真平台——UI绘制模块(二)

    这一章讲的是UI绘制模块 该模块的作用是将实验对象绘制出来,它可能是目标.传感器等等,由于事先并不知道会有哪些物体,也无法事先定义好某个对象该怎么画,以我懒人的性格,得了,就抛给用的人吧~喝前摇一摇, ...

  4. Sqlserver统计语句

    --查看被缓存的查询计划 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED st.text AS [SQL] , cp.cacheobjtype , c ...

  5. [原创]旧事重提:只配置参数实现OAuth2登录

    其实这个组件写出来很长时间了,有几个月吧,一直在 MrHuo工作室  上放着,一直说要整理,太忙没时间. 另外,关于OAuth2的一些基础内容还请从网上找找资料,太多了,写的累赘. 废话不多说,先上图 ...

  6. wind7下搭建ftp服务器

    一.首先在本地机器上创建一个用户!这些用户是用来登录到FTP的!我的电脑右键->控制面板->管理工具->计算机管理->本地用户和组->用户->“右键”新建用户-&g ...

  7. 【JAVA编码专题】UNICODE,GBK,UTF-8区别

    简单来说,unicode,gbk和大五码就是编码的值,而utf-8,uft-16之类就是这个值的表现形式.而前面那三种编码是一兼容的,同一个汉字,那三个码值是完全不一样的.如"汉"的uncode值与g ...

  8. 我和小美的撸码日记(1)之软件也需靠脸吃饭,带您做张明星脸(附后台经典框架 DEMO 下载)

    众所周知程序员得靠技术吃饭,但是真的光靠技术就够了吗?Teacher苍,一位德艺双馨的艺术家,论技术她自然是炉火纯青,我觉得她桃李遍天下的原因不仅限于些,试想如果Teacher苍长得跟凤姐一样再带点乡 ...

  9. 计算textView的高度

    - (CGFloat)measureHeightOfUITextView:(UITextView *)textView { if (floor(NSFoundationVersionNumber) & ...

  10. C语言实现OOP 版本3 :简化代码

    我倒是不追求代码和C++相似,但是应该追求简洁的代码,下面是一个新的尝试 shape.h #ifndef SHAPE_H #define SHAPE_H typedef struct shape_t ...