ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-01-30 16:32:09  阅读:225  来源: 互联网

标签:入门 ResourceManager 队列 ApplicationMaster 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博客

标签:入门,ResourceManager,队列,ApplicationMaster,YARN,调度,详解,集群,资源
来源: https://blog.csdn.net/qq_37771475/article/details/119247800

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有