MapReduce思想

  MapReduce思想在生活中处处可见。或多或少都曾接触过这种思想。MapReduce的思想核心是“分而治之”,适用于大量复杂的任务处理场景(大规模数据处理场景)。即使是发布过论文实现分布式计算的谷歌也只是实现了这种思想,而不是自己原创。
  Map负责“分”,即把复杂的任务分解为若干个“简单的任务”来并行处理。可以进行拆分的前提是这些小任务可以并行计算,彼此间几乎没有依赖关系。
  Reduce负责“合”,即对map阶段的结果进行全局汇总。
MapReduce简单入门知识

构建抽象模型:Map和Reduce

 MapReduce借鉴了函数式语言中的思想,用Map和Reduce两个函数提供了高层的并行编程抽象模型。
 Map: 对一组数据元素进行某种重复式的处理;
 Reduce: 对Map的中间结果进行某种进一步的结果整理。
 MapReduce中定义了如下的Map和Reduce两个抽象的编程接口,由用户去编程实现:
 map: (k1; v1) → [(k2; v2)]
 reduce: (k2; [v2]) → [(k3; v3)]
 Map和Reduce为程序员提供了一个清晰的操作接口抽象描述。通过以上两个编程接口,大家可以看出MapReduce处理的数据类型是<key,value>键值对。

MapReduce 运行流程图:
MapReduce简单入门知识

MapReduce框架结构

一个完整的mapreduce程序在分布式运行时有三类实例进程:
1、MRAppMaster:负责整个程序的过程调度及状态协调
2、MapTask:负责map阶段的整个数据处理流程
3、ReduceTask:负责reduce阶段的整个数据处理流程
MapReduce简单入门知识

MR on Yarn

容器:container, on nodemanager节点机器上将一定大小的内存 和 cpu vcore组成的单元,运行我们计算的任务。
vcore:虚拟core;YARN中目前的CPU被划分成虚拟CPU(CPU virtual Core),这里的虚拟CPU是YARN自己引入的概念,初衷是,考虑到不同节点的CPU性能可能不同,每个CPU具有的计算能力也是不一样的,比如某个物理CPU的计算能力可能是另外一个物理CPU的2倍,这时候,你可以通过为第一个物理CPU多配置几个虚拟CPU弥补这种差异。用户提交作业时,可以指定每个任务需要的虚拟CPU个数。
yarn当中的各个主要组件的介绍:
ResourceManager:yarn集群的主节点,资源作业管理者 ,主要用于接收客户端提交的任务,并对任务进行分配。
Applications Manager::作业管理。
Resource Scheduler :资源调度。
NodeManager:yarn集群的从节点,主要用于任务的计算。
ApplicationMaster:当有新的任务提交到ResourceManager的时候,ResourceManager会在某个从节点nodeManager上面启动一个ApplicationMaster进程,负责这个任务执行的资源的分配,任务的生命周期的监控等。
Container:资源的分配单位,ApplicationMaster启动之后,与ResourceManager进行通信,向resourceManager提出资源申请的请求,然后ResourceManager将资源分配给ApplicationMaster,这些资源的表示,就是一个个的container。

一个MapReduce任务执行流程:

1:用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。

2:ResourceManager为该应用程序分配第一个Container,并与对应的Node-Manager通信,要求它在这个Container中启动应用程序的ApplicationMaster。

3:ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过ResourceManage查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7。

4:ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。

5:一旦ApplicationMaster申请到资源后,便与对应的NodeManager通信,要求它启动任务。

6:NodeManager为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。

7:各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态。

8:应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己。

当用户向YARN中提交一个应用程序后,YARN将分两个阶段运行该应用程序:

a. 第一个阶段是启动ApplicationMaster;
b. 第二个阶段是由ApplicationMaster创建应用程序,为它申请资源,并监控它的整个运行过程,直到运行完成。

shuffle阶段:

可参考:
https://blog.csdn.net/qq_37283909/article/details/88066093

相关文章: