Spark资源调度机制源码分析--基于spreadOutApps及非spreadOutApps两种资源调度算法

Spark资源调度机制源码分析--基于spreadOutApps及非spreadOutApps两种资源调度算法

1、spreadOutApp尽量平均分配到每个executor上;

2、非spreadOutApp尽量在使用单个executor的资源。


源码分析

org.apache.spark.deploy.master.Master

1、首先判断,master状态不是ALIVE的话,直接返回
2、调度driver
3、 Application的调度机制(核心之核心,重中之重)


源码如下:

   /* 
   *schedule()解决了spark资源调度的问题
   */
  private def schedule() {
    //首先判断,master状态不是ALIVE的话,直接返回
    //也就是说,stanby master是不会进行application等资源调度的
    if (state != RecoveryState.ALIVE) { return }

    // First schedule drivers, they take strict precedence over applications
    // Randomization helps balance drivers
    
    //Random.shuffle的原理,大家要清楚,就是对传入的集合的元素进行随机的打乱
    //取出了workers中的所有之前注册上来的worker,进行过滤,必须是状态为ALIVE的worker
    //对状态为ALIVE的worker,调用Random的shuffle方法进行随机的打乱
    val shuffledAliveWorkers = Random.shuffle(workers.toSeq.filter(_.state == WorkerState.ALIVE))
    val numWorkersAlive = shuffledAliveWorkers.size
    var curPos = 0

    //首先,调度driver
    //为什么要调度driver,大家想一下,什么情况下,会注册driver,并且会导致driver被调度
    //其实 ,只有用yarn-cluster模式提交的时候,才会注册driver;因为standalone和yarn-client模式,都会在本地直接
    //启动driver,而不会来注册driver,就更不可能让master调度driver了
    
    //driver调度机制
    //遍历waittingDrivers ArrayBuffer
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值