一.MapReduce WordCount
MapReduce将作业的整个运行过程分为两个阶段:Map阶段Reduce阶段。
Map阶段由一定数量的Map Task组成,例如:
- 输入数据格式解析:InputFormat
- 输入数据处理:Mapper
- 数据分组:Partitioner
- 数据按照key排序
- 本地规约:Combiner(相当于local reducer,可选)
- 将任务输出保存在本地
Reduce阶段由一定数量的Reduce Task组成,例如:
- 数据远程拷贝
- 数据按照key排序
- 数据处理:Reducer
- 数据输出格式:OutputFormat
通常我们把从Mapper输出数据到Reduce读取数据之间的过程称之为shuffle。在shuffle过程中,我们把各个Mapper的相同Partitioner的数据拷贝到同一个Reducer机器节点上,进行合并和排序。
import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
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.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class WordCount {
//自定义Mapper类
public static class TokenizerMapper
extends Mapper<Object, Text, Text, IntWritable>{
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
//每次输入一行就会调用一次map方法