`

spark-学习笔记--17 spark1.3 资源调度

 
阅读更多

spark1.3  资源调度

 

 

1、判断当前是否为alive master ,不是直接返回

2、取状态为alive的 worker 并随机打乱

3、首先调度Driver-- yarn-cluster模式下会执行

     3.1 当前Driver还没启动的话 ,遍历所有活着的worker 

3.2 若这个worker空闲内存 >= Driver需要的内存  并且  worker的空闲cpu数量 >= Driver需要的cpu数量  则 启动Driver

      并将Driver从waitingDrivers队列移除

         3.2.1 启动driver:

                将Driver加入 worker的缓存

                将worker内使用的内存 和 cpu数量  都加上Driver需要的内存和cpu数量

                把worker放入Driver的缓存中--相互引用

                调用worker的actor   给他发送lunchDriver消息   让worker启动Driver  将Driver状态设置为 running

 

 

4、application 调度

 

    两种调度算法: spreadoutApps  和  非 spreadoutApps    之后的版本对此有调整

4.1 默认spreadoutApps----------将 要启动的executor平均分配到各个worker上去

    4.1.1 遍历waitingApps 中的 application 

      4.1.1.1  从workers中 过滤出状态为alive的 ,

          再次过滤出可以被app使用的worker(之前没有启动过executor 且剩余内存大于 可以启动的一个executor内存)

  然后按照剩余cpu数量倒序排列

  4.1.1.2  创建一个空数组  存储了要分配给每个worker的cpu数量

  4.1.1.3  获取到底要分配多少cpu 取app剩余要分配的cpu数量和 worker总共可用数量的最小值

              4.1.1.4  遍历可以分配的worker  若还有可以分配的cpu 分配cpu

  4.1.1.5  遍历worker 只要上面给worker分配了core  就在这个worker上启动executor

           --- 在application缓存中添加 executor  创建executor对象

  

 

    4.1 非spreadoutApps----------将每个app 分配到尽可能少的worker上去

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics