Map、Reduce和Job方法总结

map方法:

map的方法

public void map(Object key, Text value, Context context) throws IOException, InterruptedException {…}

key:偏移量,一般为0,用不到
value:每行的值
context:可以记录输入的key和value

例如:context.write(new Text("hadoop"), new IntWritable(1));
此外context还会记录map运算的状态。
10
1
map的方法
2

3
public void map(Object key, Text value, Context context) throws IOException, InterruptedException {}
4

5
key:偏移量,一般为0,用不到
6
value:每行的值
7
context:可以记录输入的key和value
8

9
例如:context.write(new Text("hadoop"), new IntWritable(1));
10
此外context还会记录map运算的状态。

rediuce方法:

reduce的方法

public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {…}

reduce函数的输入也是一个key/value的形式,
不过它的value是一个迭代器的形式Iterable<IntWritable> values,

也就是说reduce的输入是一个key对应一组的值的value,reduce也有context和map的context作用一致。
1
reduce的方法
2

3
public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {}
4

5
reduce函数的输入也是一个key/value的形式,
6
不过它的value是一个迭代器的形式Iterable<IntWritable> values,
7

8
也就是说reduce的输入是一个key对应一组的值的value,reduce也有context和map的context作用一致。

job:

Job job = new Job(conf, "word count");
    job.setJarByClass(WordCount.class);
    job.setMapperClass(TokenizerMapper.class);
    job.setCombinerClass(IntSumReducer.class);
    job.setReducerClass(IntSumReducer.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);

第一行就是在构建一个job,在mapreduce框架里一个mapreduce任务也叫mapreduce作业也叫做一个mapreduce的job,而具体的map和reduce运算就是task了,这里我们构建一个job,构建时候有两个参数,一个是conf这个就不赘述了,一个是这个job的名称。
  
第二行就是装载程序员编写好的计算程序,例如我们的程序类名就是WordCount了。这里我要做下纠正,虽然我们编写mapreduce程序只需要实现map函数和reduce函数,但是实际开发我们要实现三个类,第三个类是为了配置mapreduce如何运行map和reduce函数,准确的说就是构建一个mapreduce能执行的job了,例如WordCount类。
  
第三行和第五行就是装载map函数和reduce函数实现类了,第四行是装载Combiner类。

第六行和第七行是定义输出的key/value的类型,也就是最终存储在hdfs上结果文件的key/value的类型。
x
1
    Job job = new Job(conf, "word count");
2
    job.setJarByClass(WordCount.class);
3
    job.setMapperClass(TokenizerMapper.class);
4
    job.setCombinerClass(IntSumReducer.class);
5
    job.setReducerClass(IntSumReducer.class);
6
    job.setOutputKeyClass(Text.class);
7
    job.setOutputValueClass(IntWritable.class);
8

9
第一行就是在构建一个job,在mapreduce框架里一个mapreduce任务也叫mapreduce作业也叫做一个mapreduce的job,而具体的map和reduce运算就是task了,这里我们构建一个job,构建时候有两个参数,一个是conf这个就不赘述了,一个是这个job的名称。
10
  
11
第二行就是装载程序员编写好的计算程序,例如我们的程序类名就是WordCount了。这里我要做下纠正,虽然我们编写mapreduce程序只需要实现map函数和reduce函数,但是实际开发我们要实现三个类,第三个类是为了配置mapreduce如何运行map和reduce函数,准确的说就是构建一个mapreduce能执行的job了,例如WordCount类。
12
  
13
第三行和第五行就是装载map函数和reduce函数实现类了,第四行是装载Combiner类。
14

15
第六行和第七行是定义输出的key/value的类型,也就是最终存储在hdfs上结果文件的key/value的类型。
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
    FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
    System.exit(job.waitForCompletion(true) ? 0 : 1);

第一行就是构建输入的数据文件
第二行是构建输出的数据文件
最后一行如果job运行成功了,我们的程序就会正常退出。
FileInputFormat和FileOutputFormat可以设置输入输出文件路径,mapreduce计算时候,输入文件必须存在,要不直Mr任务直接退出。输出一般是一个文件夹,而且该文件夹不能存在。
1
    FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
2
    FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
3
    System.exit(job.waitForCompletion(true) ? 0 : 1);
4

5
第一行就是构建输入的数据文件
6
第二行是构建输出的数据文件
7
最后一行如果job运行成功了,我们的程序就会正常退出。
8
FileInputFormat和FileOutputFormat可以设置输入输出文件路径,mapreduce计算时候,输入文件必须存在,要不直Mr任务直接退出。输出一般是一个文件夹,而且该文件夹不能存在。

map端job:图示:

reduce端job:图示:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值