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

标签 java hadoop apache-spark queue

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

scheduling mode in spark

一个在调度器下,如下所示 enter image description here

我想了解两种设置和抢占的区别。我的要求是,在运行较大的作业时,中间提交的小作业必须获得资源而无需等待更长时间。

最佳答案

让我解释一下 Spark On Yarn 模式。

当您向 spark 提交 scala 代码时,spark 客户端将与 yarn 交互并启动 yarn 应用程序。此应用程序将负责您的 Scala 代码中的所有作业。在大多数情况下,每个作业都对应一个reduce()、collect()这样的Spark Action。那么问题来了,如何在这个应用程序中调度不同的作业,例如,在你的应用程序中,有3个并发作业出来并且等待执行?为了应对,Spark为作业制定了调度器规则,包括FIFO和Fair。也就是说,spark调度器,包括FIFO和Fair,是在作业层面的,它是spark ApplicationMaster 做调度工作。

但是 yarn 的调度器,是容器级别的。Yarn 不关心这个容器中运行的是什么,也许容器是一个 Mapper 任务,一个 Reducer 任务,一个 Spark Driver 进程或 Spark 执行程序进程等。例如,您的 MapReduce 作业当前要求 10 个容器,每个容器需要(10g 内存和 2 个 vcores),而您的 spark 应用程序当前要求 4 个容器,每个容器需要(10g 内存和 2 个 vcores)。 Yarn 必须通过一条规则来决定集群中现在有多少个容器可用以及应该为每个请求分配多少资源,这条规则就是 Yarn 的调度器,包括 FairScheduler 和 CapacityScheduler。

一般来说,你的spark应用会向yarn请求几个container,yarn会由它的scheduler决定当前可以为你的spark应用分配多少container。分配完这些container后,Spark ApplicationMaster会决定如何分配这些container它的工作。

下面是关于spark scheduler的官方文档:https://spark.apache.org/docs/2.0.0-preview/job-scheduling.html#scheduling-within-an-application

关于java - spark中的spark调度模式和应用队列有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38874777/

相关文章:

hadoop - 配置单元 SQL CalcitePlanner : CBO failed due to missing column stats

hadoop - 执行错误,从org.apache.hadoop.hive.ql.exec.mr.MapRedTask返回代码2

apache-spark - 在 csv 文件中写入数据帧会删除字符串列中的前导空格

java - 在没有 Spark 控制台的情况下使用 Apache Spark MLib 库

Java子窗口: Netbeans

java - 我对 org.springframework.mock.web 缺少什么依赖项?

java - 启用 Java 安全性(Java 加密扩展 - JCE)后 Eclipse 崩溃

apache - 如何设置动物园管理员法定人数?

apache-spark - 使用 Spark 从日期列中获取周末日期

java - 无法更改 netbeans 日志记录级别