写在前面: 如果本文有错误的地方还望大佬指出,小弟不胜感激.
-
MapReduce的框架介绍
1.1. 说道mapreduce不得不说一下他的设计思想
MapReduce的核心思想就是 “分而治之” 那什么是分而治之呢?举个例子: 就比如说古代皇帝要去管理一整个国家,但是他一个人肯定是管理不过来的,然后就有了宰相,大臣等,但是这些人也管理不过来,于是就继续往下分,就有了县官等等. 由县官将每个县的问题上报给大臣,然后又有大臣上报给宰相或者皇帝.这里我们可以理解成两个mapreduce,县官到大臣的过程中,县官是map,大臣是reduce,然后大臣到宰相的过程中大臣是map,宰相是reduce.(有点啰嗦了~~)
Map负责“分”,即把复杂的任务分解为若干个“简单的任务”来并行处理。可以进行拆分的前提是这些小任务可以并行计算,彼此间几乎没有依赖关系。
Reduce负责“合”,即对map阶段的结果进行全局汇总。
1.2. 那么在hadoop中MapReduce是怎样的设计构思了
第一点: 继承了mapreduce的思想.
第二点: 简化并行计算的编程模型, 降低开发并行应用的入门门槛.
1.3. 那么MapReduce在hadoop上的运行流程是什么呢?
第一步: 将编写好的代码提交给resourceManager
第二步: resourceManager上会有一个ApplicationManager接收任务,它收到后会在NodeManager上创建一个ApplicationMaster进程
第三步: ApplicationMaster也不知道哪些节点上有空余的资源,所有它回去找resourceManager中的ResourceScheduler申请资源列表
第四步: ApplicationMaster拿到资源列表后知道哪里有可用的资源了, 于是就去其他空余的NodeManager上创建MapTask和ReduceTask任务
第五步: MapTask和ReduceTask任务会定时给ApplicationMaster上报任务进度,ApplicationMaster会定时给client端上报任务进度和最终结果 -
前面我们已经说了MapReduce的设计思想,那么重点来了,MapReduce的工作机制是什么呢?
2.1. MapTask的工作机制
第一步: 首先通过InputFormat(默认是org.ap