流程
这里列举最常见的wordcount示例,首先给出执行图例:
下面对mapreduce作业进行概述:
一个Map/Reduce 作业(job) 通常会把输入的数据集切分为若干独立的数据块,由 map任务(task)以完全并行的方式处理它们。框架会对map的输出先进行排序, 然后把结果输入给reduce任务。通常作业的输入和输出都会被存储在文件系统中。
通常计算节点和存储节点通常在一起,移动计算比移动数据更节省资源
框架把作业的输入看为是一组<key, value> 键值对,同样也产出一组 <key, value> 键值对做为作业的输出,这两组键值对的类型可能不同。
下面给出代码参考
Mapper过程代码 WCMapper.java
public class WCMapper extends Mapper<LongWritable, Text, Text, LongWritable>{
@Override
protected void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
String val = value.toString();//一行一行的数据
String [] words = val.split(" ");
for (String word : words) {
context.write(new Text(word), new LongWritable(1));//分割出来,每个单词个数为1,在reduce阶段累加统计
}
}
}
Reducer过程代码 WCReducer.java
public class WCReducer exten