编程规范
分成 3个部分:
- Mapper
- Reducer
- Driver
Mapper
创建类,继承
org.apache.hadoop.mapreduce.Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>- 泛型
KEYIN, VALUEIN:输入的 key 和 value - 泛型
KEYOUT, VALUEOUT:输出的 key 和 value - 泛型是 hadoop 定义的序列化类型,后面会介绍
- 泛型
输入数据是 Key/Value 对的形式。
- key:是偏移量
- value:是对应的数据,如:一行数据
重写
map()方法,对每一对输入 Key/Value 执行一次map()方法自定义输出数据,是 Key/Value 对
源码
org.apache.hadoop.mapreduce.Mapper 源码如下:
public class Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT> {
/**
* 任务开始时调用一次该方法,相当于初始化方法
*/
protected void setup(Context context
) throws IOException, InterruptedException {
// NOTHING
}
/**
* 大多数程序应该覆盖该方法
*/
protected void map(KEYIN key, VALUEIN value,
Context context)
/**
* 任务结束时调用一次该方法,用于销毁一些资源
*/
protected void cleanup(Context context
) throws IOException, InterruptedException {
// NOTHING
}
/**
* 一般不需要覆盖
*/
public void run(Context context) throws IOException, InterruptedException
Reducer
- 创建类,继承
org.apache.hadoop.mapreduce.Reducer<KEYIN,VALUEIN,KEYOUT,VALUEOUT>- 泛型
KEYIN, VALUEIN:输入的 key 和 value,即:Mapper的输出 key 和 value泛型 - 泛型
KEYOUT, VALUEOUT:输出的 key 和 value - 泛型是 hadoop 定义的序列化类型,后面会介绍
- 泛型
- 输入数据,是 Key/Value 对的形式
- 重写
reduce()方法,对每一对输入 Key/Value 执行一次reduce()方法 - 自定义输出数据,是 Key/Value 对,也就是 最终结果
源码
org.apache.hadoop.mapreduce.Reducer 类源码如下:
public class Reducer<KEYIN,VALUEIN,KEYOUT,VALUEOUT> {
/**
* 任务开始时调用一次该方法,相当于初始化方法
*/
protected void setup(Context context
) throws IOException, InterruptedException
/**
* 大多数程序应该覆盖该方法
*/
protected void reduce(KEYIN key, Iterable<VALUEIN> values, Context context
) throws IOException, InterruptedException
/**
* 任务结束时调用一次该方法,用于销毁一些资源
*/
protected void cleanup(Context context
) throws IOException, InterruptedException
/**
* 一般不需要覆盖
*/
public void run(Context context) throws IOException, InterruptedException
}
Driver
整个程序由 Driver 提交,提交 job 对象