一、MR的架构
1、简介:MapReduce是一个软件框架,基于该框架能够容易地编写应用程序,这些应用程序能够运行在由上千个商用机器组成的大集群上,并以一种可靠的,具有容错能力的方式并行地处理上TB级别的海量数据集
2、4个对象:
客户端:编写mapreduce程序,配置作业,提交作业,这就是程序员完成的工作;
JobTracker:初始化作业,分配作业,与TaskTracker通信,协调整个作业的执行;
TaskTracker:保持与JobTracker的通信,在分配的数据片段上执行Map或Reduce任务,TaskTracker和JobTracker的不同有个 很重要的方面,就是在执行任务时候TaskTracker可以有n多个,JobTracker则只会有一个
Hdfs:保存作业的数据、配置信息等等,最后的结果也是保存在hdfs上面
二、MapReduced的工作流程
输入分片(inputsplit):在进行map计算之前,mapreduce会根据输入文件计算输入分片(input split),每个输入分片(input split)针对一个map任务;存储的并非数据本身,而是一个分片长度和一个记录数据的位置的数组,输入分片(input split)往往和hdfs的block(块)关系很密切
map阶段:程序员编写好的map函数了,因此map函数效率相对好控制,而且一般map操作都是本地化操作也就是在数据存储节点上进行;
combiner阶段:combiner阶段是程序员可以选择的,combiner其实也是一种reduce操作,因此我们看见WordCount类里是用reduce进行加载的
shuffle阶段:将map的输出作为reduce的输入的过程就是shuffle了
reduce阶段:和map函数一样也是程序员编写的,最终结果是存储在hdfs上的。