一、概述
Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,至关于一个分布式的操做系统平台,而MapReduce等运算程序则至关于运行于操做系统之上的应用程序。服务器
Yarn的架构以下图所示:网络
从Yarn的架构图来看,他主要由ResourceManager、NodeManager、ApplicationMaster和Container等一下几个组件构成。架构
1)ResourceManager 分布式
Yarn分层结构的本质是ResourceManager,这个实体控制整个集群并管理应用程序向基础计算资源的分配。Resourcemanager将各个资源(计算,内存,带宽等)精心安排给基础NodeManager。ResourceManager还与ApplicationMaster一块儿分配资源,与NodeManager一块儿启动和监视他们的基础应用程序。post
总的来讲,RM有如下功能:操作系统
(1)处理客户端的请求blog
(2)启动和监控ApplicationMaster内存
(3)监控NodeManager资源
(4)资源分配与调度rpc
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、内存等多维度的资源以及环境变量、启动命令等任务运行相关的信息
二、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注销且关闭本身。
整体来讲,分为两步:
一、启动ApplicationMaster,申请资源
二、运行任务,直到任务运行完成。