yarn

1.1           yarn(分布式资源管理器)

1.1.1     yarn是什么?

yarn是MapReduce第二代,将jobtracker重构呈功能分离成单独的组件。Yarn可以看作一个集群操作系统,他为应用程序提供了基本的服务来更好的利用大的、动态的、并行的基础设施资源。用任何语言编写的应用程序都能顺利用任意规模的Hadoop集群的计算和存储资源。

yarn是一种分层的集群架构,分层的本质是resourcemanager—RM。

  1. 控制整个集群并管理应用程序向基础计算资源分配;
  2. 将各资源(计算、内存、宽带等)进行安排给基础nodemanager(yarn的媒节点代理)

1.1.2     yarn主要架构

yarn由三个组件组成:ResourceManager(RM)、Applications Manager—ASM、NodeManager(NM)。

1.1.2.1               ResourceManager

ResourceManager(RM)是一个全局的资源管理器,负责整个系统的资源管理和分配,简称RM。

RM构成:

  1. Scheduler--调度器:根据容量、队列等限制条件(如每个队列分配一定的资源,最多执行一定数量的作业等),将系统中的资源分配给各个正在运行的应用程序,该调度器是一个可插拔的组件,用户可根据自己的需要设计新的调度器。
  2. Applications Manager--ASM 应用程序管理器:负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以启动ApplicationMaster、监控ApplicationMaster运行状态并在失败时重新启动它等。

1.1.2.2               ApplicationMaster

ApplicationMaster是应用程序管理器,简称AM。

       AM是每个用户作业的主进程,负责管理作业生命周期,包括动态的增加或减少资源使用(container)、管理执行流程(map任务和reduce任务),处理故障和计算偏差以及执行其他的本地优化。

AM的功能

  1.                  i.            与RM调度器协商以获取资源--用Container表示;
  2.                ii.            将得到的任务进一步分配给内部的任务(资源的二次分配);
  3.              iii.            与NM通信以执行和监控任务;
  4.               iv.            监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启任务。

1.1.2.3               NodeManager(NM)

NM是hadoop每个节点上的资源和任务管理器,一方面,它会定时地向RM汇报本节点上的资源使用情况和各个Container的运行状态;另一方面,它接收并处理来自AM的Container启动/停止等各种请求。

1.1.2.4               Container

Container(容器)是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当AM向RM申请资源时,YARN会为每个任务分配一个Container,且该任务只能使用该Container中描述的资源。

单个节点上可以有多个Container。系统中的每个节点可以认为是有内存和CPU的最小容量的多个

Container组成。AM可以请求任何Container来占据最小容量的整数倍的资源。

注释:Container是绑定到特定集群节点的一组资源逻辑组合,可以理解为一个容器。

1.1.3     RM与NM的关系

RM与NM通过心跳通信,RM与每个节点上的NM进程交互。NM负责本地资源的监控,故障报告以及container生命周期的管理(如启动和杀死作业)。RM依赖NM来维护集群的全局视图。

在启动时,NM向RM注册,然后发送包含自身状态的心跳,并等待来自RM的指令。NM的主要目标是管理RM分配给他的应用Container。

1.1.4     Yarn的作业流程

AM与RM、NM是通过可扩展网络协议进行通信的,AM向RM发出资源请求(包括本地化偏好—HDFS的使用、container属性等),当一个资源被调度给一个AM时,RM为该资源生成一个租约,供AM通过心跳获取。Container通过特定协议与AM通信来报告状态和健康信息以及接受框架特定的指令。如下图所示yarn的作业流程

客户端提交作业申请

  1. 客户端向ResourceManager(后续简称RM)提交作业申请。
  2. RM根据申请内容返回相关的信息(例如根据input的路径,返回对应的文件元数据,还有作业资源的提交路径)。
  3. 客户端根据RM返回的信息生成资源文件(job.split、job.xml、app.jar)并将资源文件提交至提交路径(一般存放在hdfs上)
  4. 资源文件提交完毕,向RM申请运行applicationMaster(后续简称AM)。

2)RM处理用户请求

RM将用户的请求打包为task,放置调度队列,根据当前yarn的调度模式进行调度(YARN提供的三种任务调度策略:FIFO Scheduler,Capacity Scheduler 和 Fair Scheduler)。

3)NodeManager从队列中获取task。

创建contianer容器启动AM和下载资源文件。

4)AM向RM申请运行mapTask容器,RM将请求再打包为task放置调度队列。

其它NM获取到task后会再创建contianer容器并下载资源文件,contianer中的mapTask任务由AM负责监控和调度。

5)AM向maptask发送程序启动命令。

6)contianer运行mapTask

7)当各节点mapTask运行完毕后,AM重复4的步骤(这次申请运行reduceTask)。

程序运行完成后,AM向RM注销自己。

Hadoop1与Hadoop yarn的区别

原文地址:https://www.cnblogs.com/sdifens/p/11350814.html