YARN介绍

简介

Apache YARN(Yet Another Resource Negotiator 的缩写)是Hadoop的集群资源管理系统。YARN被引人Hadoop 2,最初是为了改善MapReduce的实现,但它具有足够的通用性,同样可以支持其他的分布式计算模式。

YARN 提供请求和使用集群资源的API,但这些API 很少直接用于用户代码。相 反,用户代码中用的是分布式计算框架提供的更高层 API,这些 API 建立在 YARN之上且向用户隐藏了资源管理细节。

YARN在hadoop中所处位置如下:

运行机制

YARN 通过两类长期运行的守护进程提供自己的核心服务:管理集群上资源使用 的资源管理器(resource manager)、运行在集群中所有节点上且能够启动和监控容器(container)的节点管理器(node manager)。

执行过程:

  1. 客户端向资源管理器申请执行一个Yarn应用。

  2. 资源管理器通过节点管理器找到一个节点(运行计算或者是申请更多的资源)。

  3. 如果是客户端运行一个计算,则将执行结果返回给客户端。

  4. 如果是申请更多的资源,则会新开启一个节点容器。

YARN中的调度

FIFO调度器

FIFO 调度器将应用放置在一个队列中, 然后按照提交的顺序(先进先出) 运行应用。首先为队列中第一个应用的请求分配资 源,第一个应用的请求被满足后再依次为队列中下一个应用服务。

这种会导致一个耗时长的调度一直执行,后面耗时短的调度一直无法执行。

容量调度器

一个独立的专门队列保证小作业一提交就可以 启动,由于队列容量是为那个队列中的作业所保留的,因此这种策略是以整个 集群的利用率为代价的。这意味着与使用FI FO 调度器相比,大作业执行的时间 要长。

公平调度器

不需要预留一定量的资源,因为调度器会在所 有运行的作业之间动态平衡资源。第一个( 大)作业启动时,它也是唯一运行的作 业,因而获得集群中所有的资源。当第二个(小)作业启动时,它被分配到集群的一 半资源,这样每个作业都能公平共享资源。

主导资源公平性

对于单一类型资源,如内存的调度,容量或公平性的概念很容易确定。然而, 当有多种资源类型需要调度时,事情就会变得复东。例如,如果一个用户的应用对 CPU的需求量很大,但对内存的需求量很少;而另一个用户需要很少的CPU,但对内存需 求量很大。

YARN 中调度器解决这个问题的思路是,观察每个用户的主导资源,并将其作为 对集群资源使用的一个度量。这个方法称为“主导资源公平性”(Dominant Resource F a i r n e s s , D R F ) 。

例如:

一个 总 共 有 1 0 0 个 C P U 和 1 0 T B 的 集 群 。 应 用 A 请 求 的 每 份 容 器 资 源 为 2 个CPU和300GB内存,应用B请求的每份容器资源为6 个CPU和100GB内存。 A 请求的资源在集群资源中占比分别为2%和3%,由于内存占比(3%)大于CPU 占 比 (2 % ), 所 以 内 存 是 A 的 主 导 资 源 。 B 请 求 的 资 源 在 集 群 资 源 中 占 比 分 别 为 6 % 和 1%,所以CPU是B的主导资源。由于B申请的资源是A的两倍(6% vs3%),所以在 公平调度下,B将分到一半的容器数。

默认情况下不用 DRF,因此在资源计算期间,只需要考虑内存,不必考虑 CPU。

Last updated