多种输入的MapReduce程序实例

原创 2015年11月21日 10:55:29

数据集

一共有两个文件需要处理,一个为file1,一个为file2。如下。


/test/file1,文件内容如下。每行数据以制表符分开
cqnu 重庆师范大学
cqu 重庆大学


/test/file2,文件内容如下。每行数据以,分开。
thu,清华大学
pku,北京大学
nju,南京大学

任务

把两个文件的内容整合成如下格式
学校简称:cqnu 学校全称:重庆师范大学
学校简称:cqu 学校全称:重庆大学
学校简称:nju 学校全称:南京大学
学校简称:pku 学校全称:北京大学
学校简称:thu 学校全称:清华大学

解决方法

采用MultipleInputs来处理,详见API文档
MultipleInputs

示例代码

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.KeyValueTextInputFormat;
import org.apache.hadoop.mapreduce.lib.input.MultipleInputs;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;


public class TestJoin {

    //file1的Mapper
    public static class TestJoinMapperByKeyValue extends Mapper<Text, Text, Text, Text>{

        public void map(Text key, Text value, Context context) throws IOException, InterruptedException{
            context.write(key, value);
        }
    }
    //file2的Mapper 
    public static class TestJoinMapperByText extends Mapper<LongWritable, Text, Text, Text>{

        public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException{
            String []str = value.toString().split(",");
            context.write(new Text(str[0]),new Text( str[1]));
        }
    }

    public static class TestJoinReducer extends Reducer<Text, Text, Text, Text>{

        public void reduce(Text key, Iterable<Text> value, Context context) throws IOException, InterruptedException{
            for(Text v : value){
                Text k = new Text();
                k.set("学校简称:" + key.toString());
                Text val = new Text();
                val.set("学校全称:" + v.toString());
                context.write(k, val);
            }
        }
    }
    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
        if(args.length < 2){
            System.out.println("args must be three");return ;
        }
        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf,"TestJoin");
        job.setJarByClass(TestJoin.class);


        job.setReducerClass(TestJoinReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(Text.class);
        //多种输入
        //不同的输入文件采用不同的Mapper处理
        MultipleInputs.addInputPath(job, new Path(args[0]), KeyValueTextInputFormat.class, TestJoinMapperByKeyValue.class);
        MultipleInputs.addInputPath(job, new Path(args[1]), TextInputFormat.class, TestJoinMapperByText.class);

        FileOutputFormat.setOutputPath(job, new Path(args[2]));
        System.exit(job.waitForCompletion(true)?0:1);
    }

}
版权声明:本文为博主原创文章,未经博主允许不得转载。

MapReduce编程实例(三)

前提准备: 1.hadoop安装运行正常。Hadoop安装配置请参考:Ubuntu下 Hadoop 1.2.1 配置安装 2.集成开发环境正常。集成开发环境配置请参考 :Ubuntu 搭建Hado...
  • u012736198
  • u012736198
  • 2013年11月21日 12:31
  • 5719

mapreduce 多种输入

1.多路径输入 1)FileInputFormat.addInputPath 多次调用加载不同路径 FileInputFormat.addInputPath(job, new Path("...
  • xuefengmiao
  • xuefengmiao
  • 2014年07月01日 16:43
  • 281

MapReduce多种输入格式

MapReduce多种输入格式         文件是 MapReduce 任务数据的初始存储地。正常情况下,输入文件一般是存储在 HDFS 里面。这些文件的格式...
  • u012430775
  • u012430775
  • 2016年12月14日 22:26
  • 625

MapReduce编程实例(四)

前提准备: 1.hadoop安装运行正常。Hadoop安装配置请参考:Ubuntu下 Hadoop 1.2.1 配置安装 2.集成开发环境正常。集成开发环境配置请参考 :Ubuntu 搭建Hado...
  • u012736198
  • u012736198
  • 2013年11月23日 12:38
  • 4427

【Hadoop】MapReduce输入输出格式之输入格式

MapReduce输入输出格式之输入格式
  • u011812294
  • u011812294
  • 2017年03月18日 17:34
  • 527

MapReduce输入路径

目前为止知道MapReduce有三种输入路径的设置方式: 1、第一种是通过以下方式输入: FileInputFormat.addInputPath(job, new Path(args[0]));...
  • caiandyong
  • caiandyong
  • 2015年10月20日 11:50
  • 517

MapReduce进阶:多路径输入输出

当我们得意于 MapReduce 从一个数据输入目录,把数据经过程序处理之后输出到另一个目录时。可能你正在错过一些更好的方案,因为 MapReduce 是支持多路径的输入与输出的。比如,你一个项目中的...
  • u013761665
  • u013761665
  • 2016年06月18日 21:29
  • 3566

MapReduce学习笔记之输入(二)

类图 1. InputFormat类MapReduce作业的输入数据的规格是通过InputFormat类及其子类给出的。有以下几项主要功能: 输入数据的有效性检测。 将输入数据切分为逻辑块(Inpu...
  • u013980127
  • u013980127
  • 2016年10月13日 15:30
  • 1445

MapReduce对输入多文件的处理

MultipleInputs类指定不同的输入文件路径以及输入文化格式  现有两份数据  phone  123,good number  124,common number  125,bad ...
  • u010366796
  • u010366796
  • 2015年03月29日 15:28
  • 2772

MapReduce自定义输入格式

MapReduce自定义输入格式
  • baalhuo
  • baalhuo
  • 2016年07月01日 17:23
  • 1120
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:多种输入的MapReduce程序实例
举报原因:
原因补充:

(最多只允许输入30个字)