Spark Job调度

2017-06-08  本文已影响0人  frmark

概况

spark提供了一些方案来调度资源。首先,每个spark程序都在跑在若干个独立的executor集群上的(其中executor是一个jvm来run task和store data),集群管理提供了集群层面的资源分配。其次,对于每一个spark程序来说,多个由不同进程提交的job(actions)可以并行的执行。这种情况很常见,sparkContext提供了一种公平调度的机制。

spark程序间的调度

不同的用户使用同一个集群,并使用不同的配置。最初需要解决的就是资源的分割。目前常见的分配原则有下列三种,其中yarn最常用。

spark程序内的调度

由不同线程提交的并行的job可以被同时执行,spark内部的调度是线程安全的。
一般来说,spark的调度是FIFO的,每个job还可以分成stages。如果第一个job中的stage有task运行,之后的job就需要等待。
从spark0.8开始,可以配置公平调度器,spark 分配tasks是以一种轮询的方式,短的job可以提前被执行完。可以在sparkContext中设置
spark.scheduler.mode=FAIR

公平调度

公平调度提供了一种方式将jobs一起放到某个资源池中,可以给某些重要的jobs提供高优先级的资源。可以保证需要重要jobs可以提前完成。
一般情况下,jobs被提交到了default pool中,不过可以在代码中随时控制当前线程的job在哪个pool中执行,比如sc.setLocalProperty("spark.scheduler.pool","pool"),也可以取消使用当前的pool,sc.setLocalProperty("spark.scheduler.pool", null)
以上的使用都需要配置pool的配置文件。具体有三个参数,参数的含义如下:

<?xml version="1.0"?>
<allocations>
  <pool name="production">
    <schedulingMode>FAIR</schedulingMode>
    <weight>1</weight>
    <minShare>2</minShare>
  </pool>
  <pool name="test">
    <schedulingMode>FIFO</schedulingMode>
    <weight>2</weight>
    <minShare>3</minShare>
  </pool>
</allocations>

如果在代码中使用sc.setLocalProperty("spark.scheduler.pool", "pool1"),并且不配置上述文件,每个分配池基本都是使用FIFO,weight=1,minshare=0.

上一篇 下一篇

猜你喜欢

热点阅读