YARN

2017/12/25 Yarn

YARN

YARN是一个弹性计算平台。目标是对多种处理框架进行统一的管理。共享集群的好处有很多:

  • 资源利用率高
  • 运维成本低
  • 数据共享

YARN基本组成结构

YARN总体上是Master/Slave结构,整个资源管理框架中,ResourceManager是Master,NodeManager是Slave,ResouceManager负责对各个NodeManager的资源进行统一调度和管理。用户提交一个应用程序时,需要提供一个用心跟踪和管理的Application Master,它负责向Resource Manager申请资源,并要求NodeManager启动占用一定资源的任务。

  1. ResourceManager(RM) 主要是由两个组件构成的:调度器和应用程序管理器。 (1)调度器 根据容量,队列等限制,将系统中的资源分配给各个正在支持的应用程序上。该调度器是一个『纯调度器』,这些均由ApplicationMaster完成。调度器仅根据各个应用程序的资源需求进行资源分配,资源分配的单位是『资源窗口』(Resource Containser),Container 是每个任务使用的资源量。将内存,CPU,磁盘,网络等资源封装在一起,从而限定每个任务使用的量。该调度器是一个可更换的组件,可以根据需求设计新的调度器。 (2)应用程序管理器 应用程序管理器负责整个系统中的所有应用程序,包括应用程序的提交,与调度器协商资源以启动ApplicationMaster,监控ApplicationMaster支持状态并在失败的时候重启组件等。
  2. ApplicationMaster(AM) 提交的AM,功能包括:
  • 与RM调度器协商以获取资源(Container)
  • 将任务进一步分配给内部的任务
  • 与NM通信启动和停止任务
  • 监控所有任务的支持状态,并在任务失败的时候重新为任务申请资源重启任务

现有的YARN上有两个AM实现,一个是distributedshell,一个是MRAppMaster。

  1. NodeManager(NM) NM是每个节点上资源和任务管理器,会定时的向RM汇报节点状态和信息,同时接收并处理来自AM的Container启动/停止等请求。

  2. Container Container 是YARN中的资源抽象,封装了某个节点上的多维度资源,如内存,CPU,磁盘,网络等,当AM申请资源时,RM返回的资源是用Container表示的。YARN会为每个任务分配一个Container,该任务只能使用该Container中描述的资源。YARN使用轻量级资源隔离机制Cgroups进行资源隔离。

YARN通信协议

不同组件之间通过RPC协议通信,YARN中任何两个需要相互通信的组件之间仅有一个RPC协议,对于任何一个RPC协议,通信双方有一端是Client,另一端是Server,且Client总是主动连接Server的。因此 ,YARN实际上使用的是(pull-bbased)通信模型。如图,箭头指向的组件是RPC Server,箭头尾部是RPC Client。 图一 JobClient(作业提交客户端)与RM之间的协议–ApplicationClientProtocol:JobClient通过这个协议提交应用程序,查询应用程序的状态等。 AM与RM之间的协议–ApplicationMasterProtocol:AM通过该协议向RM注册和撤销自己,并为各个任务申请资源。 AM与NM–ContainerManagementProtocol:AM通过该RPC要求NM启动或停止Container,获取各个Container的使用状态等。 AM与RM–ResourceTracker:NM通过该协议向RM注册,并且定时发送心中信息汇报当前节点的资源使用情况和Container运行情况。 YARN使用了Protocol Buffers来实现序列化,使得YARN具有向后兼容能力。

YARN 工作流程

YARN 上的应用程序分为两类,短应用和长应用。短应用是指一定时间内可运行完成并正常退出的程序。长应用是指如果正常的话,不会终止的程序。 用户提交程序后,程序的启动过程如下:

  1. 向YARN提交应用程序,包括ApplicationMaster程序,启动ApplicationMaster的命令,用户程序等。
  2. ResourceManager为该应用程序分配第一个Container,并与对应的NodeManager通信,要求它在这个Container中启动应用程序的ApplicationMaster。
  3. ApplicationMaster首先向ResourceManager注册,用户可以直接通过ResouceManager查看程序的运行状态,然后会为各个任务申请资源,监控各自的运行状态。
  4. ApplicationMaster采用轮询的方式向ResourceManager申请和领取资源。
  5. ApplicationMaster申请到了资源,与对应的NodeManager通信,要求启动任务。
  6. NodeManager为任务设置好运行环境,将任务的启动命令写到一个脚本中,通过这脚本启动任务。
  7. 各个任务通过某个RCP协议向ApplicationMaster汇报状态和进度。
  8. 应用结束的时候,ApplicationMaster向ResourceManager注销并关闭自己。

启动过程如图: 图二

Show Disqus Comments

Search

    Table of Contents