Yarn原理

欢迎关注我的公众号《小沈干货》,谢谢大家。

一、可以将YARN看作是分布式操作系统,在大数据组件中,YARN的定位是:

       1)集群资源管理中心

       2)任务调度中心

       YARN的功能进一步可以细化为:

       1)任务调度

       2)资源管理

       3)用户接口

二、YARN的体系架构

1.集群资源管理层

       YARN采用master/slave架构,主节点上运行主服务ResourceManager,从节点上运行从服务NodeManager。Client为安装在YARN客户端协议的实体机器,集群正常运行时,只存在RM和NM两类实体进程,Client并不运行。

·ResourceManager

 对内,RM通过各NM的定期心跳包,实时监控集群资源;对外,RM须为客户端提供访问接口。

·NodeManager

 对内,NM以Container为单位管理本机资源,对外,NM定期向RM汇报心跳包,当然,NM也会根据RM的回复心跳包向Container发出相应指令。

 YARN中的Container为一逻辑概念,可看成各类资源的一个逻辑集合,比如可称<1核、1G>(<CPU内核数、内存量>)为1个Container,此时双核2G机器包含两个Container。在整个集群内,只要标准统一,那么各机Container数固定。引入Container概念后,可大大方便NM管理本机资源,RM汇总集群资源。

·Client

 非活动实体,可以是命令端、Web端或程序端,制造工具的目的是使用工具,Client就是YARN的使用者。

 由上简述,可知RM和NM为YARN的核心,下面分别讲述两部分内容。

 

1)ResourceManager

 RM内部包含诸多模块。

·客户端接口

·RTS(ResourceTrackerService)

  该模块将NodeManager的心跳包中的资源信息汇总成集群资源汇总表。供Scheduler使用。

·Scheduler

  该模块为YARN的任务调度和资源分配中心,ApplicationMaster执行应用程序需要向该模块申请Container等资源。

·ApplicationsManager

    该模块管理所有的ApplicationMaster。

 

2)NodeManager

3)Client

4)Yarn-App

 

1、ResourceManager

(1)客户端与RM交互

·Client Service

·Administration Service

·Web Service

(2)应用程序与RM通信

·ApplicatioMasterService

该模块实现了ApplicationMasterProtocol协议,响应所有ApplicationMaster请求。

·AMLivelinessMonitor

该模块负责监控每个ApplicationMaster,如果某个ApplicationMaster超过十分钟还未上传心跳包,AMLivelinessMonitor就认定此ApplicationMaster超时失败,此ApplicationMaster申请的诸多Container也会被标记死亡等待RM回收。不过RM会重新调用这个应用程序,并在一新的空闲Container上运行对应的ApplicationMaster,默认情况下,做多允许两次这样的尝试。

(3)NodeManager与ResourceManager通信

·ResourceTrackerService

·NMLivelinessMonitor

 该模块监控NodeManger对RM发来的心跳包,超过十分钟即认为超时死亡,其上的正在运行的一个或多个Container也被标记为死亡,这些Container会被其对应的ApplicationMaster重新分配至其他NodeManager的Container。

对于被标记为死亡的NodeManager,一旦该NodeManager重启后将会重新加入集群并参与Container调度。

·NodeListManager

 该模块是各个NodeManager在RM内存中的一个集合,RM通过该集合管理NM。

·ApplicationManager

 该模块主要管理已提交的应用程序,比如检查应用程序提出的资源请求是否合法,记录已完成应用程序基本信息(至于已完成应用程序的完整执行输出由HistoryServer托管)。

·ApplicationMasterLauncher

 客户端应用程序穿过ClientService后,ApplicationMasterLauncher会向YarnScheduler模块注册应用程序并申请一个空闲Container,ApplicationMasterLauncher随后会在此Container上发起此应用程序的ApplicationMaster,此应用程序随后的Container由ApplicationMaster自行申请并拉起。

·YarnScheduler

 操作系统的核心功能之一是进程调度(也称CPU调度),同样YarnScheduler也是分布式操作系统YARN的最核心的模块。它主要负责给所有正在运行的应用程序分配资源,当ApplicationMaster感知到某应用程序结束时,YarnScheduler会回收此应用程序占用的Container。

 当前YARN支持的调度策略为FIFO、Fair和Capacity,其中CapacityScheduler为默认调度策略,通过配置CapacityScheduler,可以实现几个组件公用一个大集群,不过这三大调度策略可以嵌套配置(通过队列),此外YARNScheduler支持热插拔,可动态配置调度器。

 

RM的另一大构成是安全性组件,主要包含如下几个模块:

·ContainerTokenSecretManager

当在YARN上运行应用程序时,此应用程序的ApplicationMaster需要权限才能调用NodeManager上的Container。

·AMRTokenSecretManager

ApplicationMaster需要到YarnScheduler上申请Container,为了避免恶意程序模仿一个真正的ApplicationMaster向YarnScheduler申请Container,RM的AMRTokenSecretService模块会为每个合法的ApplicationMaster生成一系列令牌,这样,只有合法的ApplicationMaster才能申请Container。

·NMTokenSecretManager

ApplicationMaster需要与NodeManager通信,此时AppllicationMaster就需要使用NMToken来管理和NodeManager的连接。

·DelegationTokenSecretManager

只有授权的客户端才能向RM提交应用程序

·DelegationTokenRenewer

该模块在应用程序运行期间更新应用程序的令牌,直到该令牌不能再更新。

 

2)NodeManager

NodeManager的核心功能是管理Container。

·NodeStatusUpdater

当NodeManager启动时,NodeStatusUpdater负责向ResourceManager注册并汇报本机资源、RPC端口信息等。RM则返回心跳包给出安全相关的KEY,NodeManager将用这个KEY为ApplicationMaster的Container请求做认证。

·ContainerManager

它是NodeManager的核心组件,包含诸多子模块,它们共同协作管理本机Container.

·ContainerExecutor

该模块主要负责和底层操作系统交互,来启动、关闭并清理Container相关进程。

·NodeHealthCheckerService

该模块通过定期运行健康检查脚本,来检测节点当前健康状态,当系统健康状态发生改变时,该模块会将更改信息发送至NodeStautsUpdater,而NodeStatusUpdate则将更改信息发送给ResourceManager。

 

应用程序执行层

YARN上的应用程序Yarn-App也采用master/slave架构,master进程为ApplicationMaster,slave进程为App-Executor。

 

 

YARN集群工作机制:

我们从集群搭建到执行程序一步步展开:

当集群RM和NM搭建启动时,所有的NodeManager刚启动时,其上的NodeStautsUpdater会向ResourceManager注册并汇报本机资源、RPC端口等信息,RM接受心跳包后,会通过ResourceTrackerService模块响应,RTS会判断NodeManager注册信息是否合法,对于非法或退役的NodeManager发来的心跳包,RTS会拒绝它们的注册请求;对于合法的NodeManager发来的心跳包,RTS会自己维护一张集群资源汇总表,同时RTS会将Container信息转发至Yarn Scheduler模块,Yarn Scheduler会根据节点空闲状态以及应用程序请求做出调度。同时NodesListManager会在RM中唯一个集合,RM通过该集合来管理NM。NMLivelinessMonitor开始监控每个NodeManager,如果某NodeManager超过十分钟(可配置)还未上传心跳包,该NodeManager被设定为超时死亡,其上正在运行的一个或多个Container也被标记为死亡,这些Container会被其对应ApplicationMaster重新分配至其他NodeManager的Container,这里我们还没有上传应用程序。

当我们向集群提交应用程序,Client Service会处理所有来自客户端到RM的RPC操作。DelegationTokenSecretManager模块会给客户端生成代理令牌,该令牌会传递至想要和ResourceManager通信,但又没有启用KerBeros认证的应用程序。当我们的应用程序通过ClientService的安全协议时,ApplicationMasterLauncher模块会向Yarn Scheduler模块注册应用程序并申请一个空闲Container,AMRTokenSecretManager模块会为合法的申请生成一系列令牌,只有合法的才能向Yarn Scheduler申请Container,ApplicationMasterLauncher随后会在此Container上发起此应用程序的AppliocationMaster。随后ApplicationMaster会向NodeManager申请Container,此时,ApplicationMaster需要权限才能调用NodeManager上的Container,这时就需要RM的ContainerTokenSecretManager模块给ApplicationMaster提供一个系统类令牌集,ApplicationMaster持有这些令牌集并依据这些令牌集赋予的权限,向某NodeManager提出要求,执行此Node Manager维护的Container,ContainerManager模块负责管理本机Container,比如ResourceLocalizationService负责将执行应用程序执行过程中资源下载到本地—资源本地化。ContainerExecutor模块负责与底层操作系统交互,来启动Container相关进程。

ApplicationMaster启动后,ApplicationMaster会向NodeManager通信,请求启动Container执行应用程序,此时需要NMTokenSecretManager管理Application Master和NodeManager的连接。NodeManager会启动空闲的Container。所有Container将会向ApplicationMaster注册,通过App-Executor并行化执行应用程序,ApplicationMaster会监控各个App-Executor监控任务完成进度,一但所有任务完成,Scheduler会回收所有NM资源。ApplicationMaster也会向RM申请注销自己。整个过程,AMLivelinessMonitor和NMLivelinessMonitor会监控ApplicationMaster和NodeManager心跳包,NodeHealthCheckerService会定期进行系统健康检查脚本。

posted @ 2019-04-14 11:54  OliverShen  阅读(833)  评论(0编辑  收藏  举报