MapReduce编程规范、Mapper源码、Reducer源码

编程规范

分成 3个部分:

  • Mapper
  • Reducer
  • Driver

Mapper

  1. 创建类,继承 org.apache.hadoop.mapreduce.Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>

    • 泛型 KEYIN, VALUEIN:输入的 key 和 value
    • 泛型 KEYOUT, VALUEOUT:输出的 key 和 value
    • 泛型是 hadoop 定义的序列化类型,后面会介绍
  2. 输入数据是 Key/Value 对的形式。

    • key:是偏移量
    • value:是对应的数据,如:一行数据
  3. 重写 map() 方法,对每一对输入 Key/Value 执行一次 map() 方法

  4. 自定义输出数据,是 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

  1. 创建类,继承 org.apache.hadoop.mapreduce.Reducer<KEYIN,VALUEIN,KEYOUT,VALUEOUT>
    • 泛型 KEYIN, VALUEIN:输入的 key 和 value,即:Mapper的输出 key 和 value泛型
    • 泛型 KEYOUT, VALUEOUT:输出的 key 和 value
    • 泛型是 hadoop 定义的序列化类型,后面会介绍
  2. 输入数据,是 Key/Value 对的形式
  3. 重写 reduce() 方法,对每一对输入 Key/Value 执行一次 reduce() 方法
  4. 自定义输出数据,是 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 对象


原文出处:/show_1IXbjNctGmS.html