Mapper 任务执行过程讲解
- 第一阶段: 是把输入目录下文件按照一定的标准逐个进行逻辑切片, 切成切片规划。 默认情况下, Split size=Block size。 每一个切片有一个MapTask处理。
- 第二阶段:是对切片中的数据按照一定的规则解析成<key, value>。默认规则是把每一行文本内容解析成键值对。 key是每一行的起始位置(单位是字节), value是本行的文本内容(TextInputFormat)。
- 第三阶段:是调用Mapper类中的map方法。上阶段中每解析出来的一个<key, value>,调用一次map方法。 每次调用map方法会输出零个或多个键值对。
- 第四阶段:是按照一定的规模对第三阶段输出的键值对进行分区, 默认是只有一个区。分区的数量是Reducer任务的数量, 默认只是一个Reducer任务。
- 第五阶段:是对每个分区中的键值对进行排序。 首先, 按照键值进行排序, 对于键相同的键值对, 按照值进行排序, 比如按个键值对<2, 2>, <1, 3>, <2, 1>,键和值分别是整数。 那么排序后的结果是<1, 3>, <2, 1>, <2, 2>。如果有第六阶段, 那么进行第六阶段, 如果没有,直接输出到文件中。
- 第六阶段:是对数据进行局部聚合, 也就是combiner处理。 键相等的键值对会调用一次reduce方法。经过这一阶段, 数据量会减少, 本阶段默认是没有的。
框架图
数据分区
MAPPER整体框架
Reducer 任务执行过程讲解
- *第一阶段:是Reducer任务会主动从Mapper任务复制其输出的键值对。
- 第二阶段:是把复制到Reducer本地数据, 全部进行合并, 即把分散的数据合并成一个大的数据, 再对合并的数据排序。
- 第三阶段:是对排序后的键值对调用reduce方法。键相等的键值对调用一侧reduce方法。每次调用会产生零个或者多个键值对。最后把这些输出的键值对写入HDFS文件中。
在整个MapReduce程序开发的过程中, 我们最大的工作量是覆盖map函数和reduce函数
框架图