yarn

转载地址:

https://blog.csdn.net/qq_33624952/article/details/79341034

https://blog.csdn.net/liuwenbo0920/article/details/43304243

一,什么是yarn?

Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)是一
种新的 Hadoop 资源管理器,它是一个通用资源管理系统和调度平台,可为上层应用提供统
一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨
大好处。

什么意思?就是说,你只管编写程序,包装成job提交到yarn即可。yarn不管job用什么语言编写,也不管job用什么计算框架。yarn只管帮job分配运行时需要的资源,并且调度调度所分配的资源,直到整个job运行完成。

(1)yarn 并不清楚用户提交的程序的运行机制。

(2)yarn 只提供运算资源的调度(用户程序向 yarn 申请什么资源,yarn 就负责分配什么资源)。

(3)yarn与运行的用户程序完全解耦,意味着yarn上可以运行各种类型的分布式运算程序,如 mapreduce、storm,spark等。

(4)spark、storm 等运算框架都可以整合在 yarn 上运行,只要他们各自的框架中有符合yarn 规范的资源请求机制即可。

二,yarn架构

1,两个client(图中分别用粉色和紫色表示)向ResourceManager各自提交一个应用程序。

2,ResourceManager找到两个节点,并且与这两个节点上的NodeManager通信,先要求两个NodeManager分别分配一个Container,然后在Container中分别启动应用程序对应的ApplicationMaster。(如图有一个粉色APP Mstr和一个紫色APP Mstr)

3,ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过ResourceManager查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束。

4,ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。

5,一旦ApplicationMaster申请到资源后,便与对应的NodeManager通信,要求它启动任务。(如图粉色申领到了3个Container,而紫色申领到了一个Container)。

6,NodeManager为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。

7,各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。  在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态。

8,应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己。说明yarn只包含ResourceManager,其他的都是应用提交后临时创建的。

问题一:ResourceManager是一个节点吗?

ResourceManager是一个集群而不是指一个节点。整个集群中只有一个ResourceManager。

问题二:ApplicationMaster有几个?

用户每提交一个应用程序都会为之创建一个ApplicationMaster。ApplicationMaster取决于用户提交的应用程序的数量。

问题三:用户提交的应用程序去了哪里?

首先应用程序会提交给ResourceManager,然后ResourceManager为这个应用程序创建了一个ApplicationMaster。后面的资源分配以及任务执行都是围绕ApplicationMaster进行的,你可以认为应用程序和ApplicationMaster是相等的或者认为应用程序转化成了ApplicationMaster

三,ResourceManager(RM)

RM是一个全局的资源管理器,负责整个系统的资源管理和分配。它主要由两个组件构成:应用程序管理器(Applications Manager,ASM)和调度器(Scheduler)。

3.1   Applications Manager,ASM(应用程序管理器)

Applications Manager应用程序管理器负责管理整个系统中所有ApplicationMaster应用程序,包括应用程序提交、与调度器协商资源以启动ApplicationMaster、监控ApplicationMaster运行状态并在失败时重新启动它等。

3.2  Scheduler(调度器)

    理想情况下,ApplicationMaster对 Yarn资源的请求应该立刻得到满足,但现实情况资源往往是有限的,特别是在一个很繁忙的集群,一个应用资源的请求经常需要等待一段时间才能的到相应的资源。在Yarn中,负责给应用分配资源的就是Scheduler。其实调度本身就是一个难题,很难找到一个完美的策略可以解决所有的应用场景。为此,Yarn 提供了多种调度器和可配置的策略供我们选择。

    在 Yarn 中有三种调度器可以选择:FIFO Scheduler ,Capacity Scheduler,Fair Scheduler。

3.2.1  FIFO Scheduler

    FIFO Scheduler 把应用按提交的顺序排成一个队列,先进先出,在进行资源分配的时候,先给队列中最头上的应用进行分配资源,待最头上的应用需求满足后再给下一个分配,以此类推。


    FIFO Scheduler 是最简单也是最容易理解的调度器,也不需要任何配置,但它并不适用于共享集群。大的应用可能会占用所有集群资源,这就导致其它应用被阻塞。在共享集群中,更适合采用 Capacity Scheduler 或 Fair Scheduler,这两个调度器都允许大任务和小任务在提交的同时获得一定的系统资源。


3.2.2   Capacity Scheduler

    Capacity 调度器允许多个组织共享整个集群,每个组织可以获得集群的一部分计算能力。通过为每个组织分配专门的队列,然后再为每个队列分配一定的集群资源,这样整个集群就可以通过设置多个队列的方式给多个组织提供服务了。除此之外,队列内部又可以垂直划分,这样一个组织内部的多个成员就可以共享这个队列资源了,在一个队列内部,资源的调度是采用的是先进先出(FIFO)策略。


 

 3.2.3   Fair Scheduler

 在 Fair 调度器中,我们不需要预先占用一定的系统资源,Fair 调度器会为所有运行的job 动态的调整系统资源。如下图所示,当第一个大 job 提交时,只有这一个 job 在运行,此时它获得了所有集群资源;当第二个小任务提交后,Fair 调度器会分配一半资源给这个小任务,让这两个任务公平的共享集群资源。

    需要注意的是,在下图 Fair 调度器中,从第二个任务提交到获得资源会有一定的延迟,因为它需要等待第一个任务释放占用的 Container。小任务执行完成之后也会释放自己占用的资源,大任务又获得了全部的系统资源。最终效果就是 Fair 调度器即得到了高的资源利用率又能保证小任务及时完成。

 调度器的使用是通过 yarn-site.xml 配置文件中的yarn.resourcemanager.scheduler.class 参数进行配置的, 默认采用 Capacity
Scheduler 调度器。

 

四,ApplicationMaster(AM)

用户提交的每个应用程序均对应1个AM,主要功能包括:

与RM调度器协商以获取资源(用Container表示);

将得到的任务进一步分配给内部的任务;

与NM通信以启动/停止任务;

监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启任务。

ApplicationMaster运行在某个节点上,运行在某个节点的Container中。

五,NodeManager(NM)


NM是每个节点上的资源和任务管理器,一方面,它会定时地向RM汇报本节点上的资源使用情况和各个Container的运行状态;另一方面,它接收并处理来自AM的Container启动/停止等各种请求

六,Container

Container是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当AM向RM申请资源时,RM为AM返回的资源便是用Container表示的。YARN会为每个任务分配一个Container,且该任务只能使用该Container中描述的资源。

需要注意的是,Container不同于MRv1中的slot,它是一个动态资源划分单位,是根据应用程序的需求动态生成的。截至本书完成时,YARN仅支持CPU和内存两种资源,且使用了轻量级资源隔离机制Cgroups进行资源隔离。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值