MapReduce的多路径输出

在实际项目开发的时候,经常会出现把同一个文件中的内容进行分类输出,以便于进行下一轮的文件输出进行区分,这样就涉及到了HadoopMR的多路径输出的问题。

HadoopMR中的多路径输出使用的类是:MultipleOutputs,其常用接口如下:

public void write(KEYOUT key, VALUEOUT value, String baseOutputPath) 

以上接口的前面两个参数跟Context里的write一样,第三个参数是需要输出的分类前缀,比如输出如下:

multipleOutput.write(key, value, "ONE") 
multipleOutput.write(key, value, "TWO") 

则输出如下:

ONE-r-00000
TWO-r-00000

该接口也支持建立子目录,用于区别每类输出,比如:

multipleOutput.write(key, value, "folder1/ONE") 
multipleOutput.write(key, value, "folder2/TWO") 

则输出如下:

folder1/ONE-r-00000
folder2/TWO-r-00000

该接口主要用于reduce输出,下面提供reduce例子:

import java.io.IOException;

import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.output.MultipleOutputs;

import com.dataeye.mr.util.OutFieldsBaseModel;

public class MultiReducer extends Reducer<OutFieldsBaseModel, OutFieldsBaseModel, NullWritable, OutFieldsBaseModel> {

    private OutFieldsBaseModel mapValueObj = new OutFieldsBaseModel();
    
    private MultipleOutputs<NullWritable, OutFieldsBaseModel> multipleOutput;
    
    @Override
    protected void cleanup(Context context) throws IOException, InterruptedException {
        multipleOutput.close();
    }
    
    @Override
    protected void setup(Context context) throws IOException, InterruptedException {
        multipleOutput = new MultipleOutputs<NullWritable, OutFieldsBaseModel>(context);
    }

    @Override
    protected void reduce(OutFieldsBaseModel key, Iterable<OutFieldsBaseModel> values, Context context) throws IOException, InterruptedException {
        
        String[] keyArray = key.getOutFields();
        String deviceId = keyArray[0];
        mapValueObj.setOutFields(keyArray);
        int code = deviceId.hashCode() % 2;
        if (code == 0){
            multipleOutput.write(NullWritable.get(), mapValueObj, "ZERO/ZERO");
        } else {
            multipleOutput.write(NullWritable.get(), mapValueObj, "ONE/ONE");
        }
        
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 13,956评论 6 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,909评论 19 139
  • MapReduce是一个数据处理的编程模型。这个模型很简单,但也不是简单到不能够支持一些有用的语言。Hadoop能...
    单行线的旋律阅读 5,405评论 0 2
  • 目的这篇教程从用户的角度出发,全面地介绍了Hadoop Map/Reduce框架的各个方面。先决条件请先确认Had...
    SeanC52111阅读 5,712评论 0 1
  • 你是我的白日梦梦里的你朦朦胧胧听着窗外的下雨声恍惚中被惊醒碎了一地的梦拾不起年少的感动我想你想的心痛我想我也不懂这...
    6f3e65e086c5阅读 2,682评论 0 1

友情链接更多精彩内容