关于YARN

YARN是Hadoop的集群资源管理系统。

YARN应用运行机制

YARN通过两类长期运行的守护进程提供自己的核心服务:1.管理集群上资源使用的资源管理器(resource manager) 2.运行在集群中所有节点上且能够启动和监控容器的节点管理器。容器用于执行特定应用程序的进程,每个容器都有资源限制。

为了在YARN上运行一个应用,首先,客户端联系资源管理器,要求它运行一个application master进程。然后,资源管理器找到一个能够在容器中启动application master的节点管理器。准确地说,application master一旦运行起来能做什么依赖于应用本身。有可能是在所处的容器中简单地运行一个计算,并将结果返回给客户端;或是向资源管理器请求更多的容器,以用于运行一个分布式计算。

YARN应用可以在运行中的任意时刻提出资源申请。例如,可以在最开始提出所有的请求,或者为了满足不断变化的应用需要,采取更为动态的方式在需要更多资源时提出请求。Spark采用了上述第一种方式,在集群上启动固定数量的执行器。另一方面,Mapreduce则分两步走,在最开始时申请map任务容器,reduce任务容器的启用则放在后期。同样,如果任何任务出现失败,将会另外申请容器以重新运行失败的任务。

YARN中的调度

YARN中有三种调度器可用:FIFO调度器,容量调度器和公平调度器。

1.FIFO调度器将应用放置在一个队列中,然后按照提交的顺序(先进先出)运行应用。首先为队列中第一个应用的请求分配资源,第一个应用的请求被满足后再依次为队列中下一个应用服务。FIFO调度器的优点是,简单易懂,不需要任何配置,但是不适合共享集群。大的应用会占用集群中的所有资源,所以每个应用必须等到直到轮到自己运行。在一个共享集群中,更适合使用容量调度器或公平调度器。这两种调度器都允许长时间运行的作业能及时完成,同时也允许正在进行较小临时查询的用于能够在合理时间内得到返回结果。

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

3.使用公平调度器时,不需要预留一定量的资源,因为调度器会在所有运行的作业之间动态平衡资源。第一个大作业启动时,它也是唯一运行的作业,因而获得集群中所有的资源。当第二个小作业启动时,它被分配到集群的一半资源,这样每个作业都能公平共享资源。注意,从第二个作业的启动到获得公平共享资源之间会有时间滞后,因为它必须等待第一个作业使用的容器用完并释放资源。当小作业结束且不再申请资源后,大作业将回去再次使用全部的集群资源。最终的结果是,既得到了较高的集群利用率,又能保证小作业能及时完成。

容量调度器配置

容器调度器允许多个组织共享一个Hadoop集群,每个组织可以分配到全部集群资源的一部分。每个组织被配置一个专门的队列,每个队列被配置为可以使用一定的集群资源。队列可以进一步按层次划分,这样每个组织内的不同用户能够共享该组织队列所分配的资源。在一个队列内,使用FIFO调度策略对应用进行调度。单个作业使用的资源不会超过其队列容量。然而,如果队列中有多个作业,并且队列资源不够用的时候,这时如果仍有可用的空闲资源,那么容量调度器可能会将空余的资源分配给队列中的作业,哪怕这会超出队列容量。这称为“弹性队列”。

正常操作时,容量调度器不会通过强行终止来抢占容器。因此,如果一个队列一开始资源够用,然后随着需求增长,资源开始不够用时,那么这个队列只能等着其他队列释放容器资源。缓解这种情况的方法是,为队列设置一个最大容量限制,这样这个队列就不会过多侵占其他队列的容量了,当然,这样做是以牺牲队列弹性为代价的,因此需要在不断尝试和失败中找到一个合理的折中。

公平调度器配置

抢占:抢占,就是允许调度器终止那些占用资源超过了其公平共享份额的队列的容器,这些容器资源释放后可以分配给资源数量低于应得份额的队列。注意,抢占会降低整个集群的效率,因为被终止的combiner需要重新执行。

延迟调度

所有的YARN调度器都试图以本地请求为重。容量调度器和公平调度器都支持延迟调度。YARN中的每个节点管理器周期性的向资源管理器发送心跳请求。心跳中携带了节点管理器中正运行的容器,新容器可用的资源等信息,这样对于一个计划运行一个容器的应用而言,每个心跳就是一个潜在的调度机会。当使用延迟调度时,调度器不会简单的使用它收到的第一个调度机会,而是等待设定的最大数目的调度机会发生,然后才放松本地性限制并接受下一个调度机会。

主导资源公平性
YARN中调度器解决这个问题的思路是,观察每个用户的主导资源,并将其作为对集群资源使用的一个度量,这个方法称为“主导资源公平性”。

猜你喜欢

转载自blog.csdn.net/Heloiselt/article/details/80946208