一、综述
Job Schedule(简称JS)用来对不同的并行应用进行资源调度工作。
二、应用间的调度
当多个用户需要用到你的集群时,根据cluster manager会有不同的分配策略。
最简单的方法,同时也是各种cluster manager通用的策略,就是静态分配资源。也就是说,每个应用会被分配它能用到的最大量的资源,并且保持到这个应用的整个生命周期。
》standalone mode:默认情况下,被提交的应用按照先进先出的原则被分配资源,而且每个应用都会尝试去利用所有可被利用的节点。你可以限制每个应用的节点数量(设置spark.cores.max或者更改应用的默认设置spark.deploy.defaultCores),同时也可以控制每个应用的内存使用(spark.executor.memory
);
》mesos:略
》yarn:Spark YARN client的--num-executors
选项,用来控制分配在集群上的executor数量; --executor-memory
和 --executor-cores用· 来控制每个executor上的资源;
第二种方法是动态分享CPU核,适用于mesos。这种模式同样会为每个应用分配独立的固定的内存(spark.executor.memory)。当一个应用不在运行任务时,其他应用就会在这个应用的资源上运行任务。因此也存在一些不可预知的潜在风险,比如说该应用在拿回所需要的资源的时候需要一段时间。To use this mode, simply use a mesos://
URL without settingspark.mesos.coarse
to true。
注意:现在还没有一种模式让应用之间可以进行内存共享。如果你想分享数据,我们建议运行一个服务应用,该应用可以通过询问相同的RDD来服务多个需求。在未来的版本中,类似Tachyon的内存存储系统会提供另一种途径来分享RDD。
2.1、动态资源分配
Spark1.2已经介绍了根据工作量来动态分配应用的集群资源的能力。这就意味着应用可以把不再用的资源还给集群,同时也可以以后需要的时候再要回来。这个特性在多个应用运行在spark集群上分享集群资源上更加有用。动态资源分配的粒度为executor。可以通过spark.dynamicAllocation.enabled
来设置。
目前这种功能只适用于YARN。未来将会有版本把这种特性扩展到standalone 和mesos coarse-grained模式。 Note that although Spark on Mesos already has a similar notion of dynamic resource sharing in fine-grained mode, enabling dynamic allocation allows your Mesos application to take advantage of coarse-grained low-latency scheduling while sharing cluster resources efficiently.
2.1.1、配置和建立(不翻译)
All configurations used by this feature live under the spark.dynamicAllocation.*