spark的FairSchedule

本文探讨了Spark的公平调度机制,包括公平调度与公平算法的结合使用,以及在standalone模式下的局限性。介绍了如何通过代码控制固定poolName实现调度优化,并讨论了FAIR调度与FIFO调度的区别。此外,还提到了关键参数如`spark.scheduler.mode`和`spark.scheduler.allocation.file`在配置公平调度中的作用。
摘要由CSDN通过智能技术生成

spark 内置TaskScheduler级别的调度算法,分别是队列与公平,默认是队列方式。具体源码可参考SchedulableBuilder

准确来讲spark有两层公平,一层是公平调度,一层是公平算法,如此便可使用公平调度+公平算法 或 公平调度+队列算法

公平调度方面,spark的多队列设置在standlong模式下则是较为鸡肋,原因在于没有动态选择队列执行任务的权利,同时公平调度仅仅是单应用下产物,故此设置多队列则也无法发挥其优势,使用配置文件设置则无法得到应用。如利用spark长生命周期管理的程序,不断提交任务,则可以于代码级进行控制(我是选择如此控制,效果也较为明显,但硬代码依然要编写一小部分),参考如下代码,每次仅仅一个固定的poolName。


  sc.setLocalProperty("spark.scheduler.pool", "系统1")

终究使用原生态的spark的同学较多,故此会显得公平调度有些鸡肋,其实不然,相对FIFO模型的默认使用POOL的方式讲,其实FAIR已有对POOL调用做了部分的优化,可以同时执行数个独立stage。

FIFO:

  override def addTaskSetManager(manager: Schedulable, properties: Properties) {
    rootPool.addSchedulable(manager)
  }


POOL:

  /* 添加Schedulable */
  override def addSchedulable(schedulable: Schedulable) {
    require(schedulable != null)
    schedulableQueue.add(schedulable)
    schedulableNameToSchedulable.put(schedulable.name, schedulable)
    schedulable.parent = this
  }


FAIR:

  /** 添加TaskSetManager,决定具体执行pool
   *  @param manager TaskSetManager
   *  @param properties sparkContext 内置配置文件 */
  overridedef addTaskSetManager(manager: Schedulable, properties: Properties) {
    var poolName = DEFAULT_POOL_NAME
    var parentPool = rootPool.getSchedulableByName(pool
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值