用户编写的程序需要分成以下三个部分:

  1. Mapper
    - 用户自定义的Mapper需要继承自己的父类
    - Mapper的输入数据是KV对的形式(KV的类型可以自己定义)
    - Mapper中的业务逻辑写在map()方法中
    - Mapper的输出数据也是KV对的形式
    - map()方法(MapTask进程)对每一个<K,V>调用一次
  2. Reducer
    - 用户自定义的Reducer需要继承自己的父类
    - Reducer的输入数据类型对应Mapper的输出数据,也是KV
    - Reducer的业务逻辑写在reducer()方法中
    - ReduceTask今晨对每一组相同k的<K,V>组调用一次reduce()方法
  3. Driver
    - 相当于YARN集群的客户端,用于提交我们整个程序到YARN集群,提交的是封装了MapReduce程序相关运行参数的job对象。