揭秘Apache Hadoop YARN,第3部分:调度程序概念[译]

第1部分第2部分,我们介绍了YARN资源分配的基础知识。在本部分中,我们将提供集群调度的概述,并介绍Fair Scheduler,YARN中提供的调度程序选择之一。

独立的计算机可以有多个CPU核心,每个核心运行一个进程,但是可以有多达几百个进程同时运行。调度程序是桌面操作系统的一部分,它将进程分配给CPU执行。

如先前在第1部分:集群和YARN基础中所述,应用程序由群集上的多个任务(通常在不同的主机上)组成。集群调度程序本必须处理:

  • 多租户:在集群上,许多用户代表多个用户组启动许多不同的应用程序。集群调度程序允许不同的工作负载同时运行。
  • 可扩展性:集群调度程序需要扩展到运行许多应用程序的大型集群。这意味着增加集群的大小应该提高整体性能,而不会对系统延迟产生负面影响

在YARN中调度

ResourceManager(RM)跟踪群集上的资源,并将它们分配给需要它们的应用程序。调度程序是RM的一部分,并在共享资源中执行策略。请注意:

  • YARN使用队列在多个租户之间共享资源。这将在下面的“队列简介”中更详细地介绍。
  • ApplicationMaster(AM)跟踪每个任务的资源需求并协调容器请求。这种方法允许更好的扩展,因为RM /调度程序不需要跟踪在集群上运行的所有容器。

公平调度(Fair Scheduler)

Fair Scheduler是YARN支持的调度器中的受欢迎的选择(Cloudera推动)。简单的说,它在集群上运行的所有作业之间公平共享资源。接下来的几节我们会详细说明Fair Scheduler内部的常用控制机制。

队列介绍(Queues)

队列是YARN调度程序的组织结构,允许多个租户共享集群。当应用程序提交到YARN时,它们由调度程序分配到队列。根(root)队列是所有队列的父级。所有其他队列都是根队列或另一个队列(也称为分层队列)的子代。队列通常对应于用户,部门或优先级。

图1提供了fair-scheduler.xml的基本Fair Scheduler示例,以及每个队列在集群中的份额的图形表示。

  • 途中有4个部门在队列中 (marketing, sales, datascience, 和 admin).
  • 有一个特殊的admin队列,用户fred或greg,是管理员

Figure 1: Example part of fair-scheduler.xml and corresponding fair shares of each queue
Figure 1: Example part of fair-scheduler.xml and corresponding fair shares of each queue

使用分层队列

一个级别的队列允许沿着一个维度(例如每个团队一个队列)共享该集群,但是在多个维度(例如,每个团队和优先级)之间共享集群是常见的。公平调度器允许嵌套队列形成分层队列结构,其中每个级别可以对应于其父队列下的维度。

例如,下面的图2显示了按团队和优先级维度共享的资源。第一级对应于团队(例如root.datascience),并且每个第一级队列可以具有用于来自该特定团队的作业的高优先级和低优先级的子队列(例如,root.datascience.short_jobsroot.datascience.best_effort_jobs

队列名

在本文的后续部分中,我们引用不同的队列名称(如root或root.sales.northamerica)。在明确的地方,我们使用尽可能最短的版本,即northamerica而不是root.sales.northamerica。

示例#1:单个队列中的权重

sales队列中,有两个子队列:northamericaeurope。每个都具有30.0的权重,因此在销售中的每个子队列的公平共享实际上是50%。

marketing队列中,有两个权重不同的子队列:reportswebsitereports队列分配的资源是website队列作业的两倍。然而,它们在一起的权重仍然由marketing队列的权重控制。

队列权重和自顶向下调度

队列权重用于确定队列的公平共享。 Fair Scheduler从根队列开始,并查看所有直接子队列的权重,以确定它们的公平共享。每个子队列的公平共享进一步针对其子队列的集合进行评估

示例#2:权重的自顶向下视图

marketing队列的权重为3.0,sales队列的权重为4.0,datascience队列的权重为13.0。因此,从root的分配将是15%到marketing,20%的sales,65%的datascience。

datascience的份额中,资源都被分配给short_jobs队列。如果没有分配给short_jobs队列的作业,则best_effort_jobs队列中的作业将被分配资源。

Figure 2: Example part of fair-scheduler.xml and corresponding fair shares of hierarchical queues
Figure 2: Example part of fair-scheduler.xml and corresponding fair shares of hierarchical queues

扩展阅读

要获得有关Fair Scheduler的更多信息,请参阅在线文档

总结

  • 调度程序是计算机操作系统的一部分,根据需要将资源分配给活动进程。
  • 集群调度器将资源分配给在集群上运行的应用程序。集群调度程序设计用于多租户和可扩展性。
  • YARN允许您从一组调度程序中进行选择。 Fair Scheduler被广泛使用。在最简单情况下,在集群上运行的所有作业之间均公平共享资源。
  • 公平调度程序将应用程序分配到队列。您可以根据应用程序和部门需求设置队列上的属性以调整计划行为。队列权重是控制队列中应用程序公平共享的一种方法。共享从root上分配,一次评估一个级别。

下一步

第4部分将更详细地介绍Fair Scheduler队列属性。您可以配置这些属性,以根据您的需要完全自定义Fair Scheduler。

Ray Chiang是Cloudera的软件工程师。

Dennis Dawson是Cloudera的高级技术撰稿人。

原文地址Untangling Apache Hadoop YARN, Part 3: Scheduler Concepts

打赏支持:支付宝/微信,感谢赏口饭吃