美文网首页spark大数据生态圈大数据
Spark内核分析之Scheduler资源调度机制

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

作者: z小赵 | 来源:发表于2017-12-23 22:48 被阅读33次

            上一篇我们阐述了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资源调度机制

    相关文章

      网友评论

        本文标题:Spark内核分析之Scheduler资源调度机制

        本文链接:https://www.haomeiwen.com/subject/fxffgxtx.html