YARN基本框架和工作流程

YARN基本框架和工作流程

YARN是Hadoop2.0中资源管理系统,它的基本设计思想是将MRV1中的jobtracker拆分成了两个独立的服务:一个全局的资源管理器resourceManager和每个应用程序特有的ApplicationMaster,其中resourceManager负责整个系统的资源管理和分配,而ApplicationMaster负责单个应用程序的管理。

YARN的基本组成架构

YARN总体上仍然是Master/slave架构,在整个资源管理框架中,resourceManager为master,nodeManger为slave,resourceManager负责对各个nodeManager上的资源进行统一管理和调度,当用户提交一个应用程序时,需要提供一个用以跟踪和管理这个程序的ApplicationMaster,它负责向resourceManager申请资源,并要求nodeManager启动可以寄占用一定资源的任务,由于不同的ApplicationMaster被分布到不同的节点上,因此它们之间不会相互影响。
YARN主要由ResourceManager、NodeManager、ApplicationMaster和container等几个组件构成。
这里写图片描述

ResourceManager(RM)

RM是一个全局的资源管理器,负责整个系统的资源管理和分配,它主要由两个组件构成调度器 (scheduler)和应用程序管理器(Application Manager,ASM)

调度器

调度器根据容量、队列等限制条件(如每个队列分配一定的资源,最多执行一定数量的作业等),将系统中的资源分配给各个正在运行的应用程序中,需要注意的是,该调度器是一个”纯调度器”,它不再从事任何与具有应用程序相关的工作,比如不负责监控或者跟踪应用的执行状态等,也不负责重新启动因应用程序失败或者硬件故障而产生的失败任务,这些均交由应用程序相关的ApplicationMaster完成,调度器仅根据各个应用程序的资源需求进行资源分配,而资源分配单位用一个抽象概念”资源容器”(resource container,简称container)表示,container是一个动态资源分配单位,它将内存、cpu、磁盘、网络等资源封装在一起,从而限定每个任务使用的资源量,此外该调度器是一个可插拔的组件,用户可根据自己的需要设计新的调度器,YARN提供多种直接可用的调度器,比如 fair scheduler和capacity scheduler等

应用程序管理器

应用程序管理器负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以启动ApplicationMaster、监控ApplicationMaster运行状态并在失败时重启它等

ApplicationMaster(AM)
用户提交的每个应用程序均包含一个AM,主要功能包括:
1、与RM调度器协商以获取资源(用container表示)
2、将得到的任务进一步分配给内部的任务
3、与NM通信以启动/停止任务
4、监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以启动任务。
当前YARN自带了两个AM实现,一个是用于演示AM编写方法的实例程序distributedshell,它可以申请一定数目的container以并行运行一个shell命令或者shell脚本,另一个是运行MapReduce应用程序的AM-MRAppMaster。

NodeManager(NM)

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

container

container是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当AM向RM申请资源时,RM为AM返回的资源便是container表示的,YARN会为每个任务分配一个container,且该任务只能使用该container中描述的资源,需要注意的是,container不同于MRV1中的slot,它是一个动态资源划分单位,是根据应用程序的需求动态生成的,

YARN的通信协议

1、jobclient(作业提交客户端)与RM之间的协议-ApplicationClientProtocol:jobclient通过该RPC协议提交应用程序、查询应用程序状态等
2、admin(管理员)与RM之间的通信协议-ResourceManagerAdministration Protocol:admin通过该RPC协议更新系统配置文件,比如节点黑白名单、用户队列权限等
3、AM与RM之间的协议-ApplicationMasterProtocol:AM通过该RPC协议向RM注册和撤销自己,并为各个任务申请资源
4、AM与NM之间的协议-ContainerManagementProtoocl:AM通过该RPC要求NM启动或者停止container,获取各个container的使用状态等信息
5、NM与RM之间的协议—ResourceTracker:NM通过该RPC协议向RM注册,并定时发送心跳信息汇报当前节点的资源使用情况和container运行情况
这里写图片描述

YARN工作流程

1、用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster命令、用户程序等
2、resourceManager为该应用程序分配第一个container,并与对应的nodeManager通信,要求它在这个container中启动应用程序的ApplicationMaster
3、ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过ResourceManager查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复4~7
4、ApplicationMaster采用轮询的方式通过RPC协议向resourceManager申请和领取资源
5、一旦ApplicationMaster申请到资源后,便与对应的Nodemanager通信,要求它启动任务。
6、NodeManager为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务
7、各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态
8、应用程序运行完成后,ApplicationMaster向resourceManager注销并关闭自己
这里写图片描述

原文:https://blog.csdn.net/paicMis/article/details/53890676

猜你喜欢

转载自blog.csdn.net/Li_and_Li/article/details/81134866