作者:黑马程序员链接:https://zhuanlan.zhihu.com/p/81237437来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

简单介绍

相信关于Hadoop中MapReduce的相关文章会很多,这里只简单介绍一下MapReduce的相关知识。

Hadoop的MapReduce来源于Google公司的三篇论文中的MapReduce,其核心思想是“分而治之”

Map负责“分”,即把复杂的任务分解为若干个“简单的任务”来并行处理。可以进行拆分的前提是这些小任务可以并行计算,彼此间几乎没有依赖关系。

Reduce负责“合”,即对map阶段的结果进行全局汇总。

现阶段MapReduce一般运行在Hadoop2.x版本的yarn资源平台上,具体运行过程后面会有详细说明。

MapReduce编程规范

MapReduce 的开发一共有八个步骤, 其中 Map 阶段分为 2 个步骤,Shuffle 阶段 4 个步骤,Reduce 阶段分为 2 个步骤

Map 阶段 2 个步骤

1)设置 InputFormat 类, 将数据切分为 Key-Value(K1和V1) 对, 输入到第二步

2)自定义 Map 逻辑, 将第一步的结果转换成另外的 Key-Value(K2和V2) 对, 输出结果

Shuffle 阶段 4 个步骤

3)对输出的 Key-Value 对进行分区

4)对不同分区的数据按照相同的 Key 排序

5)(可选) 对分组过的数据初步规约, 降低数据的网络拷贝

6)对数据进行分组, 相同 Key 的 Value 放入一个集合中

Reduce 阶段 2 个步骤

7)对多个 Map 任务的结果进行排序以及合并, 编写 Reduce 函数实现自己的逻辑, 对输入的 Key-Value 进行处理, 转为新的 Key-Value(K3和V3)输出

8)设置 OutputFormat 处理并保存 Reduce 输出的 Key-Value 数据

mapreduce编程模式(MapReduce开发运行的精简原理)(1)

MapReduce的步骤图

yarn资源调度

yarn是hadoop集群当中的资源管理系统模块,从hadoop2.0开始引入yarn模块,yarn可为各类计算框架提供资源的管理和调度,主要用于管理集群当中的资源(主要是服务器的各种硬件资源,包括CPU,内存,磁盘,网络IO等)以及调度运行在yarn上面的各种任务。

相比于hadoop1.x版本,yarn核心出发点是为了分离资源管理与作业监控,实现分离的做法是拥有一个全局的资源管理ResourceManager(RM),以及每个应用程序对应一个的应用管理器ApplicationMaster(AM)。

总结一句话就是说:yarn主要就是为了调度资源,管理任务。

YARN总体上是Master/Slave结构,主要由ResourceManager、NodeManager、 ApplicationMaster和Container等几个组件构成。

ResourceManager(RM) 负责处理客户端请求,对各NM上的资源进行统一管理和调度。给ApplicationMaster分配空闲的Container 运行并监控其运行状态。主要由两个组件构成:调度器和应用程序管理器:

调度器(Scheduler):调度器根据容量、队列等限制条件,将系统中的资源分配给各个正在运行的应用程序。调度器仅根据各个应用程序的资源需求进行资源分配,而资源分配单位是Container。Shceduler不负责监控或者跟踪应用程序的状态。总之,调度器根据应用程序的资源要求,以及集群机器的资源情况,为应用程序分配封装在Container中的资源。

应用程序管理器(Applications Manager):应用程序管理器负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以启动ApplicationMaster 、监控ApplicationMaster运行状态并在失败时重新启动等,跟踪分给的Container的进度、状态也是其职责。

NodeManager (NM) NodeManager 是每个节点上的资源和任务管理器。它会定时地向ResourceManager汇报本节点上的资源使用情况和各个Container的运行状态;同时会接收并处理来自ApplicationMaster 的Container 启动/停止等请求。

ApplicationMaster (AM): 用户提交的应用程序均包含一个ApplicationMaster ,负责应用的监控,跟踪应用执行状态,重启失败任务等。ApplicationMaster是应用框架,它负责向ResourceManager协调资源,并且与NodeManager协同工作完成Task的执行和监控。

Container: Container是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当ApplicationMaster向ResourceManager申请资源时,ResourceManager为ApplicationMaster 返回的资源便是用Container 表示的。

yarn的架构和工作流程

mapreduce编程模式(MapReduce开发运行的精简原理)(2)

步骤分析:

  1. 客户端通过命令(hadoop jar xxx.jar)提交上传任务到主节点ResourceManager(RM)中的ApplicationManager进程
  2. 主节点RM判断集群状态,选择一台NodeManager(NM),开启一块资源Container,用来开启AppMaster进程
  3. AppMaster进程获取RM接收的任务请求,进行任务分配
  4. AppMaster根据任务情况向RM中的ResourceScheduler索要资源分配方案
  5. AppMaster根据资源分配方案找到到各个NodeManager从节点
  6. 在从节点上开启资源Container,并运行任务Task
  7. AppMaster获取各个Task上传的任务执行进度和结果
  8. AppMaster将任务执行的结果返回给ApplicationManager
,