很抱歉在这里有点笼统,但是对于作业调度在内部如何在Spark中工作感到有些困惑。从here文档中,我知道这是Hadoop Fair Scheduler的某种实现。

我无法四处了解用户到底是谁(Linux用户,hadoop用户,spark客户?)。我也无法理解此处如何定义池。例如,在我的hadoop集群中,我已经将资源分配给了两个不同的池(让我们将它们称为团队1和团队2)。但是在Spark集群中,不同的池是否会实例化,并且其中的用户会实例化自己的Spark上下文?再次让我怀疑,当我将属性设置为spark.scheduler.pool时,我应该传递哪些参数。

我对驱动程序如何实例化spark上下文,然后将它们拆分为任务和作业有基本的了解。也许我在这里完全没有指出要点,但我真的很想了解Spark的内部调度程序如何在操作,任务和工作的上下文中工作

最佳答案

默认情况下,spark与FIFO调度程序一起使用,在该调度程序中以FIFO方式执行作业。

但是,如果您的群集位于YARN上,则YARN具有可插拔的调度程序,这意味着在YARN中,您可以选择自己的调度程序。如果使用CDH分发的YARN,则默认情况下将具有FAIR调度程序,但也可以使用Capacity Scheduler。

如果您使用的是HDP分发的YARN,则默认情况下将具有CAPACITY调度程序,如果需要,您可以转到FAIR。

Scheduler如何与Spark配合使用?

我假设您在YARN上拥有 Spark 集群。

当您提交Spark作业时,它首先命中您的资源经理。现在,您的资源管理器负责所有调度和分配资源。因此,它与在Hadoop中提交作业基本相同。

调度程序如何工作?

公平调度是一种为作业分配资源的方法,以使所有作业在一段时间内平均获得相等的资源份额。当有一个作业正在运行时,该作业将使用整个群集。当提交其他作业时,将腾出的任务插槽分配给新作业,以便每个作业获得大致相同的CPU时间(使用抢占杀死所有用过的任务)。与默认的Hadoop调度程序(FIFO)形成一个作业队列不同,它可以使短作业在合理的时间内完成,而不会使长作业耗尽。这也是在多个用户之间共享集群的一种合理方法。最后,公平共享也可以与工作优先级一起使用-优先级用作权重,以确定每个工作应获得的总计算时间的比例。

CapacityScheduler 旨在允许共享大型集群,同时为每个组织提供最小的容量保证。中心思想是,Hadoop Map-Reduce集群中的可用资源在多个组织之间进行划分,这些组织根据计算需求共同为集群提供资金。组织还有一个额外的好处,即组织可以访问任何多余的容量而不会被他人使用。这以成本有效的方式为组织提供了 flex 。

07-24 18:57
查看更多