java—spark中的spark调度模式和应用程序队列有什么区别?

xdyibdwo  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(465)

当提交多个作业以同时运行或稍后提交的较小作业时,测试spark作业的行为。我在spark ui中遇到了两个设置。一种是使用spark的调度模式,如下图所示

一个在调度程序下,如下所示

我想了解两种设置和抢占之间的区别。我的要求是,在运行较大的作业时,中间提交的较小作业必须在不等待较长时间的情况下获取资源。

cwdobuhd

cwdobuhd1#

我认为spark.scheduling.mode(fair/fifo)如图所示,用于调度使用fair或fifo策略等提交给taskscheduler的任务集(单个同阶段任务)。。这些任务集属于同一个作业。
为了能够同时运行作业,请在单独的线程中执行每个作业(转换+操作)。当作业提交到dag时,主线程被阻塞,直到作业完成并返回或保存结果。

ecfsfe2w

ecfsfe2w2#

让我来解释一下Spark纺纱模式。
当您向spark提交scala代码时,spark客户端将与yarn交互并启动一个yarn应用程序。此应用程序将负责scala代码中的所有作业。在大多数情况下,每个作业都对应一个spark操作,如reduce()、collect()。然后,问题来了,如何在这个应用程序中调度不同的作业,例如,在您的应用程序中,有3个并发作业出来等待执行?为了解决这个问题,spark为作业制定了调度规则,包括fifo和fair,也就是说spark调度规则,包括fifo和fair,是在作业的层次上,由spark应用程序管理员来完成调度工作。
但是yarn的调度程序是在容器级别上的,yarn并不关心这个容器中运行的是什么,可能容器是Map器任务、缩减器任务、spark驱动程序进程或spark执行程序进程等等。例如,mapreduce作业当前要求10个容器,每个容器需要(10g内存和2个vCore),而spark应用程序当前要求4个容器,每个容器需要(10g内存和2个vCore)。yarn必须通过一个规则来决定集群中现在有多少容器可用,以及应该为每个请求分配多少资源,这个规则是yarn的调度器,包括fairscheduler和capacityscheduler。
通常,spark应用程序要求yarn提供几个容器,yarn将决定其调度程序当前可以为spark应用程序分配多少容器。分配这些容器后,spark applicationmaster将决定如何在其作业中分配这些容器。
下面是关于spark的官方文件scheduler:https://spark.apache.org/docs/2.0.0-preview/job scheduling.html#应用程序内的调度

相关问题