Spark内核分析之Scheduler资源调度机制

        上一篇我们阐述了Driver,Application,Worker的注册实现原理,本篇我们来接着聊聊Driver,Application在注册之后是如何实现调度的。废话不多说,直接上源码进行分析(本篇所述内容比较重要,请耐心看完)。

Driver调度机制图

我们来分析一下上面这段代码:

1.首先过滤出 所有的worker进行过滤操作,获得所有正常工作的worker,然后将其进行shuffle操作; 2.遍历等待调度的Driver,判断当前的Driver是否可以被启动并且是否有可用的worker; 3.如果满足当前的worker的内存大于等于要启动的driver的内存并且该worker的CPU和核数大于等于要启动driver需要的CPU核数,调用launchDriver在worker上启动Driver; 4.launchDriver方法会向worker发送一个启动Driver的信号,然后将driver的状态置为RUNNING;

spreadOutApps策略启动

非spreadOutApps策略

分析完Driver的scheduler机制后,我们来看看Application适合调度的,Application的调度有两种方式,如上图所示,其实说白了就是一种是平均分配策略和非平均分配策略,现在来分析一下源码是如何实现的;

基于平均分配算法:

1.遍历需要调度的Application,且该Application还需要被分配CPU; 2.遍历拿到所有可用的worker,然后获得每个worker已经分配的CPU核数; 3.获得可以分配的CPU的核数,循环遍历每个worker,并为其分配一个CPU; 4.循环启动每个worker上的executor;

基于非平均分配算法与平均分配算法的区别:

区别在于:基于非平均分配算法,在遍历所有可用的worker,为每个worker尽量分配多的CPU,然后在每个分配了CPU的worker上创建一个Executor并通知worker启动executor。

总结:本节课主要介绍了一下资源调度的实现,虽然内容比较短,但是非常重要,在后期关于spark调优会起到很大的帮助。下篇文章会接着我们本篇的内容,来分析我们的相关应用到底是如何进行启动的;欢迎关注。

如需转载,请注明:

上一篇:Spark内核分析之Spark的HA源码分析

本篇:Spark内核分析之Scheduler资源调度机制

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏gaoqin31

PHP 输出控制

默认情况下,输出一个字符串到浏览器,经过3个阶段PHP buffer->Tcp buffer->浏览器(IE浏览器有的版本也存在buffer)

21240
来自专栏深度学习之tensorflow实战篇

python(Django之html模板继承)

Django之html模板继承简单案例 1 构建母板,确定不变内容和可变内容 ? 2 构建子板,对可变内容进行填充 ? 结果: ? Dja...

42050
来自专栏星回的实验室

js重修课[六]:客户端JavaScript一些琐事

8120
来自专栏Spark学习技巧

Kafka源码系列之如何删除topic

本文依然是以kafka0.8.2.2为例讲解 一,如何删除一个topic 删除一个topic有两个关键点: 1,配置删除参数 delete.topic.enab...

46490
来自专栏乐享123

Auto Reload Modules in Django Shell

23150
来自专栏Python

python文件和目录操作方法大全

一、python中对文件、文件夹操作时经常用到的os模块和shutil模块常用方法。 1.得到当前工作目录,即当前Python脚本工作的目录路径: os.get...

39360
来自专栏喵了个咪的博客空间

phalapi-入门篇3(请求和返回)

#phalapi-入门篇3(请求和返回)# ? ##前言## 先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个优秀的开源框架. 这一小...

38550
来自专栏跟着阿笨一起玩NET

WindowsService的调试方法

本人转载:http://www.cnblogs.com/xiebin1986/archive/2011/12/15/2288893.html

11410
来自专栏mySoul

微信小程序自定义组件(二)

两个<custom-ul>以及<custom-li>两个组件都为自定义组件,如果进行通信会非常的难以操作,至此通过relations完成子父组件的定义,简化通信...

32230
来自专栏IT派

Python 的异步 IO:Asyncio 简介

所谓「异步 IO」,就是你发起一个 IO 操作,却不用等它结束,你可以继续做其他事情,当它结束时,你会得到通知。

15130

扫码关注云+社区

领取腾讯云代金券