MapReduce 是一种用于数据处理的编程模型。我们可以这样理解MapReduce, 把一堆杂乱无章的数据按照某种特征归纳起来,然后处理并得到最后的结果。Map 面对的是杂乱无章的互不相关的数据,它解析每个数据,从中提取key 和value, 也就是提取了数据的特征。经过MapReduce 的shuffle 阶段之后,在Reduce 阶段看到的都是归纳好的数据,然后再进行进一步的处理以得到结果。
Hadoop2 中的MapReduce 工作机制
1.客户端开始运行MapReduce 作业
2.向资源管理器请求一个新的应用ID,用作MapReduce 作业ID
3.将运行作业所需要的资源(作业JAR 文件、配置文件和计算所得的输入分片)复制到HDFS中以作业ID命名的目录下
4.提交作业
5a.资源管理器分配一个容器
5b.在容器中启动作业对应的application master 进程
6.作业的初始化
7.Application master 接收来自于HDFS 的、在客户端计算的输入分片。然后对每一个分片创建一个map 任务对象以及多个reduce 对象
application master 决定如何运行构成MapReduce 作业的各个任务。如果作业很小,就选择在当前JVM 上运行任务,否则申请其它节点。
默认情况下,小作业就是少于10个mapper 且只有一个reducer 且输入大小小于一个HDFS 块的作业。
8.如果作业不是小作业,那么application master 就会为该作业中的所有map 任务和reduce 任务向资源管理器申请容器。
首先为map 任务发出申请,这是因为所有的map 任务必须在reduce 的排序阶段能够启动前完成。直到有5% 的map 任务已经完成时,为reduce 任务申请容器的请求才会发出。
9a 9b.一旦资源管理器为任务分配了一个特定节点上的容器,application master 就通过与节点管理器通信来启动容器。
10.在运行任务之前,首先将任务需要的资源本地化,包括任务作业的配置、JAR文件等。
11.运行任务(Map 任务 or Reduce 任务)