Mapper任务的执行过程
每个 Mapper 任务是一个 java 进程,它会读取 HDFS 中的文件,解析成很多的键值对,经过我们覆盖的 map 方法处理后, 转换为很多的键值对再输出
把 Mapper 任务的运行过程分为六个阶段。
第一阶段是把输入文件按照一定的标准分片(InputSplit),每个输入片的大小是固定的。
第二阶段是对输入片中的记录按照一定的规则解析成键值对。
第三阶段是调用 Mapper 类中的 map 方法。
第四阶段是按照一定的规则对第三阶段输出的键值对进行分区。
第五阶段是对每个分区中的键值对进行排序。
第六阶段是对数据进行归约处理,也就是 reduce 处理。键相等的键值对会调用一次reduce 方法。经过这一阶段,数据量会减少。归约后的数据输出到本地的 linxu 文件中。

Reducer任务的执行过程
每个 Reducer 任务是一个 java 进程。Reducer 任务接收 Mapper 任务的输出,归约处理后写入到 HDFS 中。
可以分为3个阶段
第一阶段是 Reducer 任务会主动从 Mapper 任务复制其输出的键值对。 Mapper 任务可能会有很多,因此 Reducer 会复制多个 Mapper 的输出。
第二阶段是把复制到 Reducer 本地数据,全部进行合并,即把分散的数据合并成一个大的数据。再对合并后的数据排序。
第三阶段是对排序后的键值对调用 reduce 方法。 键相等的键值对调用一次 reduce 方法,每次调用会产生零个或者多个键值对。最后把这些输出的键值对写入到 HDFS 文件中。
在整个 MapReduce 程序的开发过程中,我们最大的工作量是覆盖 map 函数和覆盖reduce 函数。