YARN调度组件-FIFO、Capacity、Fair调度器

YARN调度组件

YARN有一个可拔插的调度器组件,根据不同的使用场景和用户需求,管理员可以选择简单的FIFO(先入先出),Capacity或者Fair Share Scheduler。Scheduler类在yarn-dafault.xml中设置关于当前正在运行的调度信息,可以通过打开的ResourceManager网站界面,在左侧的集群菜单中的调度选项找到。

1.FIFO调度器

FIFO调度基本上是一个简单的“先来先服务”的调度,其中JobTracker从一个工作队列首先拉取最早的作业。FIFO调度不考虑作业的优先级和范围。FIFO调度适合低负载集群,但是当使用大型共享集群时,它的功能不佳并且可能会导致一些问题。

2.Capacity调度器

Capacity调度器是YARN中的另一个可拔插的调度器,允许多个组件安全的共享一个大规模Hadoop集群。容量调度器在很多大规模Hadoop集群上成功运行。

为了使用Capacity调度器,管理员使用总槽位(或处理器)容量的预定值配置一个或多个队列。这种分配保证了每个队列的最小资源使用量。管理员为每个队列的可用资源容量配置了软限制和可选的硬限制。每个队列有严格的ACL(访问控制列表),用以控制哪些用户可以向每个队列提交作业。另外也有措施来保证用户无法查看或修改其他用户的应用程序。

容量调度器允许共享集群,同时给每个用户或租一定的最小容量保证。这些最小值在不需要时可以放弃,超过的容量将会给与那些最饥饿的队列,其中饥饿成都用运行中或以用的队列容量来衡量。因此,由初始的最小容量保证所定义的最满队列将获得最需要的资源。空闲容量可以被分配,并且以最具成本效益的弹性方式提供给用户。

队列的定义和属性(如容量和ACL)可以由管理员以安全的方式,在运行时更改,以尽量减少对用户的干扰。管理员可以在运行时添加额外的队列,但队列不能在运行时被删除。此外,管理员可以在运行时停止队列,以确保在现有的应用程序运行完毕后,没有新的应用程序被提交。

Capacity调度器目前支持内存密集型应用程序,其中应用程序可以指定比默认值更高的内存资源需求。Capacity调度器根据来自NodeManager的信息,可以将Container 放到最适合的节点上。当工作负载可以预见的情况下,Capacity调度器效果最好,这有助于分配最小容量。为了让该调度有效的工作,需要为每个队列应该分配小雨最高预期负载的最小容量。在每个队列内部,使用层次化的FIFO来调度多个应用程序,类似于在独立的FIFO调度器中使用的方式。

3.Fair调度器

Fair调度器是Hadoop的第三个可拔插调度器,提供了共享大集群的另一种方式。公平调度室将资源公平分配给应用的方法,使得所有应用再平均情况下随着时间得到相等的份额。

在第一版Hadoop中,Fair调度器使用“pool”这个术语来指代queue。从YARN Fair调度器开始,将会使用“queue”这个术语代替pool
。为了提供与原来Fair调度器的向后兼容,“queue”元素可以命名为“pool”元素。

在Fair调度模型中,每隔应用都属于某一个队列。YARN COntainer的分配时选择使用了最少的资源的队列,在这个队列中,在选择使用了最少资源的应用程序。默认情况下,所有的用户共享一个称为“default”的队列。如果一个应用程序再Container资源请求中制定了队列,则将请求提交到该队列中。另外也可以将Fair调度器配置成根据请求中包含的用户名来分配队列。
Fair调度器还支持许多功能,如队列的权重(权重大的队列可能获得更多的Container),最小份额,最大份额,以及队列内FIFO策略,但是基本思想是尽可能平均的共享资源。

在Fair调度器下,如果单个应用程序正在运行,该应用程序可以请求整个集群资源(如果需要的话)。若有其他程序提交,空闲的资源可以被Fair的分配给新的应用,是每个应用可以获得大致相当的资源。Fair调度器也支持抢占的概念,从而可以从ApplicationMaster要回Container。根据配置和应用程序的设计,抢占和随后的资源分配可以是友好的或者强制的。处理提供公平共享,Fair调度器还允许保证队列的最小份额,这是确保某些用户、组,或者生产应用程序总能得到足够的资源。当队列中有等待的应用程序,他可以至少获取的他最小份额的资源。与此相反,当队列并不需要所有的保证份额,超过的部分可以分配给其他的运行的应用程序。为了避免用有数百个作业的单个用户充斥整个集群,Fair调度器可以通过配置文件限制每个用户和每个队列中运行应用程序的数量。若使用了该限制,用户应用程序将在队列中等待,直到前面提交的作业完成。

YARN的Fair调度器允许Container请求一定量的内存资源。对其他资源的支持已经在卖法中,如cpu类型。为了避免多个较小内存应用饿死在一个较大的内存应用,引入了“reserved Container”。如果由于内存不足,一个应用程序不能立即使用一个Container,可以将其保留给该应用程序,这样,其他应用程序不能使用这个Container,直到它被释放。被保留的Container会等待其他本地的Container被释放,然后使用这些额外的容量(即额外的RAM)来完成这个作业。一个保留的Container只允许在一个节点上,并且一个节点只允许一个保留的Container。ResourceManager的UI中报告保留内存的总量,数值越大,意味着新作业也可能需要更长时间获取空间。

Yarn Fair调度器的一个新特性是支持层次化队列。队列可以嵌套在其他队列中,每个队列将它的资源再以一种公平的调度方式分配给它的子队列。层次化队列的一个应用是表示组织的边界和层次。例如,营销和工程部门现在可以安排一个队列结构来体现他们自己的组织。队列也可以根据作业特性,如短,中,长运行时间等,再分成若干子队列。

在队列之间有较大的差别是,Fair调度器的效果最好。不同于Capacity调度器,所有的作业都可以取的进展,而不是以FIFO方式中在各自的队列中进行。

posted @ 2019-01-30 13:41  sssuperMario  阅读(389)  评论(0)    收藏  举报