大数据入门(五)YARN简介以及工作流程详解

Apache YARN(Yet Another Resource Negotiator,另一种资源协调者)是Hadoop的集群资源管理系统。YARN的核心思想是将资源管理和作业调度/监控的功能拆分为单独的守护进程——其中ResourceManager用来管理集群资源,NodeManager用来启动和监控容器。

一、YARN相关概念解析

  1. Container(容器):是集群资源(包含内存、CPU、磁盘、网络等)的抽象和封装,一个Container就是一组分配的系统资源。
  2. Job / Application(作业或应用):是需要执行的一个工作单元:它包括输入数据、MapReduce程序和配置信息。
  3. ResourceManager(RM,资源管理器):是一个全局的资源管理器,负责整个系统的资源管理和分配,主要包括两个组件,即定时调用器(Scheduler)以及应用管理器(ApplicationManager)。
  4. Scheduler(调度器):YARN Scheduler调度器的工作就是根据既定策略为应用分配资源。目前,YARN中有三种调度器:FIFO调度器、容量调度器和公平调度器。
  5. ApplicationManager(应用管理器):负责系统中所有应用程序的管理工作,主要包括应用程序提交、与调度器协商资源以启动ApplicationMaster、监控ApplicationMaster运行状态并在失败时重新启动等。
  6. ApplicationMaster(App Mstr):每当Client提交一个Application的时候,就会新建一个ApplicationMaster。由这个ApplicationMaster去与ResourceManager申请容器资源,获得资源后会将要运行的程序发送到容器上启动,然后进行分布式计算。
  7. NodeManager(节点管理器):是ResourceManager在每台机器上的代理,主要工作是负责容器的管理,并监控容器的资源使用情况,并且会定期向ResourceManager/Scheduler提供这些资源的使用报告,再由ResourceManager决定对节点的资源进行何种操作(分配,回收等)。

在这里插入图片描述

二、提交一个Application到YARN的流程详解

当用户向Yarn提交一个应用程序后,Yarn将分两个阶段运行该程序:第一个阶段是启动ApplicationMaster;第二个阶段是由ApplicationMaster创建应用程序,为它申请资源,并监控它的整个运行过程,直到运行完成。

  1. 首先,客户端向ResourceManger提交Application,其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序。
  2. ResourceManager向NodeManager通信,为该Application分配第一个容器。并在这个容器中运行这个应用程序对应的ApplicationMaster(对应步骤2a和2b)。
  3. 当ApplicationMaster启动后,会向ResourceManager注册自己,并保持心跳连接
  4. 然后ApplicationMaster会将Application进行拆分成多个Task(比如MapReduce中的MapTask和ReduceTask),接着采用轮询的方式通过RPC请求向ResourceManager为每个Task申请和获取资源
  5. ResourceManager返回ApplicationMaster申请的Container信息。申请成功的Container由ApplicationMaster进行初始化。Container的启动信息初始化后,ApplicationMaster与对应的NodeManager通信,要求NodeManager启动Container。
  6. 当容器启动后,ApplicationMaster会与NodeManager保持通信,从而对NodeManager上运行的任务进行监控和管理,Container运行期间ApplicationMaster对Container进行监控。Container通过RPC协议向对应的ApplicationMaster汇报自己的进度和状态等信息。
  7. 当应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己,并允许属于它的Container被收回。

以上就是一个Application的大体运行流程。

三、YARN Scheduler 调度器

1. FIFO Scheduler(先进先出调度器):将应用按提交的顺序放进一个先进先出的队列中。然后在进行资源分配的时候,按先进先出的原则为应用分配资源。当第一个应用的资源得到满足后,才会为下一个应用分配资源。

2. Capacity Scheduler(容量调度器):将整个集群资源划分给多个队列,每个队列按需求配置不同的容量(即资源的百分比),并且采用FIFO调度策略。通过分配容量给不同的队列,这样可以保证每个队列不会占用整个集群的全部资源。

如上图所示,我们可以将整个集群资源划分给AB两个队列。其中A分配到整个集群资源的60%,B分配到40%,并且每个队列下面可以继续划分成不同的子队列,比如B队列继续划分为B1和B2。

 

注意:单个作业使用的资源不会超过其队列容量。但是如果整个队列资源不够用时,并且其他组织队列有空闲资源,那么容量调度器会将这部分空闲资源分配给队列中的作业。这称为弹性队列(queue elasticity)。可通过maximum-capacity限制整个队列的资源使用上限(百分比)。

3. Fair Scheduler(公平调度器):与容量调度器不同的是,公平调度器不会预先占用一定的系统资源,而是会动态的分配资源。

如上图所示,当job 1提交时,整个集群没有其他作业,此时job 1会独占整个集群资源。当job 2提交后,job 1会将释放的资源分配给新的Job,最终使每个任务获取几乎一样多的资源,从而达到公平的目的。

公平调度器也可以在多个队列间工作,如上图所示,例如有两个用户A和B,他们分别拥有一个队列。当A启动一个Job而B没有任务提交时,A会获得全部集群资源;当B启动一个Job后,A的任务会继续运行,不过队列A会慢慢释放它的一些资源,之后两个任务会各自获得一半的集群资源。如果此时B再启动第二个Job并且其它任务也还在运行时,那么它将会和B队列中的的第一个Job共享队列B的资源,也就是队列B的两个Job会分别使用集群四分之一的资源,而队列A的Job仍然会使用集群一半的资源,结果就是集群的资源最终在两个用户之间平等的共享。

当整个集群资源用尽时提交一个作业,此时会处于accepted状态,并等待集群资源的释放。为了使作业从提交到执行所需的时间可预测,公平调度器支持抢占(preemption)功能。所谓抢占,就是允许调度器终止那些占用资源超过了其公平共享份额的队列的contains,这些contains资源释放后可以分配给资源数量低于应得份额的队列。注意:抢占会降低整个集群的效率,因为被终止的contains需要重新执行。

四、企业队列配置样例

 root
--> app(Fair Scheduler:80%)
    --> etl-monthly(占用整个集群30%的资源,最多可到80%,采用FIFO策略)
    --> etl-daily(占用整个集群30%的资源,最多可到100%,采用FIFO策略)
    --> etl-eco(占用整个集群20%的资源,最多可到60%,采用FIFO策略)
--> default(Fair Scheduler:20%)

五、YARN 命令

关闭一个Application:yarn application --kill <application_id>,例如yarn application --kill application_1618392236222_129696

更多见官方文档:Apache Hadoop 3.3.1 – YARN Commands

六、参考文献

Hadoop Yarn框架原理解析 - 知乎

Yarn基本概念(一)_RivenDong-CSDN博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值