1. MapReduce 核心思想
- 分布式的运算程序往往需要分成至少 2 个阶段
- 第一个阶段的 MapTask 并发实例,完全并行运行,互不相干
- 第二个阶段的 ReduceTask 并发实例互不相干,但是他们的数据依赖于上一个阶段的所有 MapTask 并发实例的输出
- MapReduce 编程模型只能包含一个 Map 阶段和一个 Reduce 阶段,如果用户的业务逻辑非常复杂,那就只能多个 MapReduce 程序,串行运行。
2. MapReduce 进程
一个完整的 MapReduce 程序在分布式运行时有三类实例进程:
- MrAppMaster :负责整个程序的过程调度及状态协调
- MapTask :负责 Map 阶段的整个数据处理流程
- ReduceTask :负责 Reduce 阶段的整个数据处理流程
3. MapReduce 编程规范
用户编写的程序分为三个部分:Mapper、Reducer 和 Driver。
-
Mapper阶段
用户自定义的Mapper要继承自己的父类 Mapper的输入数据是KV对的形式(