现实环境中,经常遇到一个问题就是想使用多个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. Android ActionBar完全解析,使用官方推荐的最佳导航栏(下) .

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/25466665 本篇文章主要内容来自于Android Doc,我翻译之后又做了些加工 ...

  2. rsync+sersync实现数据文件实时同步

    一.简介 sersync是基于Inotify开发的,类似于Inotify-tools的工具: sersync可以记录下被监听目录中发生变化的(包括增加.删除.修改)具体某一个文件或某一个目录的名字: ...

  3. 安装VMware Sphere ESXi 5.5

    安装VMware Sphere ESXi 5.5 1.准备 待安装ESXi 5.5的机器需要大于2GB以上内存,并且支持64位和虚拟化. 下载:VMware-VMvisor-Installer-5.5 ...

  4. 初学QML之QML和C++混合方法

    混合使用QML和C++的方法 1加载一个QML组件,然后从 C++对其进行操作: 2直接将一个C++对象及其属性嵌入到QML组件: 3定义一个新的QML元素(通过基于QOject的C++类)并在QML ...

  5. (转)用Eclipse编译你的ROS程序

    原地址: http://blog.csdn.net/sujun3304/article/details/18572017 好了,理解了系统各个组件的含义后,还是直接进入程序真刀真枪的从实践中学习吧! ...

  6. [Mugeda HTML5技术教程之15]案例分析:制作移动教育课件

    本文档要分析的案例是一个一氧化碳还原氧化铜的教育小课件,从中可以体会一些Mugeda API的用法和使用Mugeda动画制作移动教育课件的方法.Mugeda为移动教育领域和移动数字出版领域提供理想的教 ...

  7. ASP.NET MVC DefaultModelBinder

    转载自 Leo‘s Blog 看到很多ASP.NET MVC项目还在从request.querystring或者formContext里面获取数据,这实在是非常落后的做法.也有的项目建了大量的自定义的 ...

  8. hibernate+spring+mvc+Easyui框架模式下使用grid++report的总结

    最近刚开始接触hibernate+spring+mvc+Easyui框架,也是刚开通了博客,希望能记录一下自己实践出来的东西,让其他人少走弯路. 转让正题,以个人浅薄的认识hibernate对于开发人 ...

  9. web后台获取不到session中的值(loading sessions from persistent storage),后改用JS传值

    线上的程序似乎从session中取不到domain数据,重启了一下tomcat查看log日志发现,居然有报错.错误信息如下 22-Sep-2016 00:52:16.562 SEVERE [local ...

  10. FP—Growth算法

    FP_growth算法是韩家炜老师在2000年提出的关联分析算法,该算法和Apriori算法最大的不同有两点: 第一,不产生候选集,第二,只需要两次遍历数据库,大大提高了效率,用31646条测试记录, ...