标签:
Spark集群的调度分应用间调度和应用内调度两种情况,下文分别进行说明。
1. 应用间调度
1) 调度策略1: 资源静态分区
资源静态分区是指整个集群的资源被预先划分为多个partitions,资源分配时的最小粒度是一个静态的partition。根据应用对资源的申请需求为其分配静态的partition(s)是Spark支持的最简单的调度策略。
我们已经知道,不同的应用有各自的Spark Context且占用各自的JVM和executor(s)。根据Spark Job Scheduling文档的说明,若Spark集群配置了static partitioning的调度策略,则它对提交的多个应用间默认采用FIFO顺序进行调度,每个获得执行机会的应用在运行期间可占用整个集群的资源,这样做明显不友好,所以应用提交者通常需要通过设置spark.cores.max来控制其占用的core/memory资源。
3) 调度策略3: 动态资源申请
Spark 1.2引入了一种被称为Dynamic Resource Allocation的调度策略,它允许根据应用的workload动态调整其所需的集群资源。也即,若应用暂时不需要它之前申请的资源,则它可以先归还给集群,当它需要时,可以重新向集群申请。当Spark集群被多个应用共享时,这种按需分配的策略显然是非常有优势的。
在当前Spark版本下,动态资源申请是以core为粒度的。
需要特别注意的是,动态资源申请的调度策略默认是不启用的,且目前只支持在YARN模式(通过设置spark.dynamicAllocation.enabled可以启用该策略),根据Spark文档的说明,将来的版本会支持standalone模式和Mesos模式。
【参考资料】
1. Job Scheduling============================== EOF =========================
Spark调研笔记第3篇 - Spark集群对应用的调度策略简介
标签:
原文地址:http://blog.csdn.net/slvher/article/details/46410799