1、概述
Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而MapReduce等运算程序则相当于运行于操作系统之上的应用程序。
Yarn的架构如下图所示:
从Yarn的架构图来看,他主要由ResourceManager、NodeManager、ApplicationMaster和Container等一下几个组件构成。
1)ResourceManager
Yarn分层结构的本质是ResourceManager,这个实体控制整个集群并管理应用程序向基础计算资源的分配。Resourcemanager将各个资源(计算,内存,带宽等)精心安排给基础NodeManager。ResourceManager还与ApplicationMaster一起分配资源,与NodeManager一起启动和监视他们的基础应用程序。
总的来说,RM有以下功能:
(1)处理客户端的请求
(2)启动和监控ApplicationMaster
(3)监控NodeManager
(4)资源分配与调度
2)ApplicationMaster
ApplicationMaster管理在Yarn内运行的每个应用程序。负责协调来自RM的资源,并通过NodeManager监控容器的执行和资源的使用(CPU、内存等的资源分配)。总体来说,AM有以下作用
(1)负责数据的切分
(2)为应用程序申请资源并分配给内部的任务
(3)任务的监控与容错
3)NodeManager
NodeManager管理Yarn集群中的每个节点,并提供针对集群每个节点的服务,从监督一个容器的终生管理到监视资源和跟踪节点健康。而NodeManager管理抽象容器,这些容器代表着可供一个特定应用程序使用的针对每个节点的资源。
总体来说,NM有以下作用
(1)管理单个节点上的资源
(2)处理来自ResourceManager的命令
(3)处理来自ApplicationMaster的命令
4)、Container
Container是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当AM向RM申请资源时,RM为AM返回的资源便是用Container表示的。YARN会为每个任务分配一个Container,且该任务只能使用该Container中描述的资源。
总的来说,Container有以下作用
对任务运行环境进行抽象,封装CPU、内存等多维度的资源以及环境变量、启动命令等任务运行相关的信息
2、Yarn的运行机制
运行流程步骤为:
(1)用户向Yarn提交应用程序(job Application),jar文件,其中包裹着ApplicationMaster程序,启动ApplicationMaster的命令等
(2)RM为该job分配第一个Container,并选中一个NodeManager在其上运行job的ApplicationMaster
(3)ApplicationMaster向ApplicationsManager注册,这样就可以在RMWeb界面查询这个job的运行状态
(4)ApplicationMaster采用轮询的方式通过RPC协议向RM申请和领取资源
(5)一旦ApplicationMaster拿到资源,就与对应的NM通信,要求启动任务。
(6)NodeManager为任务设置好运行环境(jar包等),将任务命令写在一个脚本里。并通过该脚本启动任务 task。
(7)各个task通过rpc协议向ApplicationMaster汇报自己的状态和进度,以此让ApplicationMaster随时掌握各个task的运行状态。
(8)ApplicationMaster向ApplicationsManger注销且关闭自己。
总体来说,分为两步:
1、启动ApplicationMaster,申请资源
2、运行任务,直到任务运行完成。