专栏首页简单聊聊SparkSpark内核分析之Scheduler资源调度机制

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 条评论
登录 后参与评论

相关文章

  • Kafka系列9:面试题是否有必要深入了解其背后的原理?我觉得应该刨根究底(上)

    在本文开始之前,作者一直有个疑惑,就是面试题是只写写问题和答案就草草了事,还是应该深入分析一下其背后发生的一些原理。和朋友探讨以后作者还是决定采用后者的方式,因...

    z小赵
  • Kafka系列9:面试题是否有必要深入了解其背后的原理?我觉得应该刨根究底(上)

    在本文开始之前,作者一直有个疑惑,就是面试题是只写写问题和答案就草草了事,还是应该深入分析一下其背后发生的一些原理。和朋友探讨以后作者还是决定采用后者的方式,因...

    z小赵
  • Kafka系列第7篇:你必须要知道集群内部工作原理的一些事!

    上篇文章讲到了消息在 Partition 上的存储形式,本来准备接着来聊聊生产中的一些使用方式,想了想还有些很重要的工作组件原理没有讲清楚,比如一个 Topic...

    z小赵
  • Web Worker

    JavaScript是单线程语言,如果在Js主线程上进行比较耗时的操作,那么不仅异步的事件回调无法正常完成,浏览器的渲染线程也将被阻塞,无法正常渲染页面。Web...

    WindrunnerMax
  • [译] 深入理解 Node.js 中的 Worker 线程

    原文:https://blog.insiderattack.net/deep-dive-into-worker-threads-in-node-js-e75e1...

    江米小枣
  • node 线程池技术让文档编译起飞

    最近在维护微信文档这块内容,遇到一个问题,文档数量多起来编译时间会变慢,而且有时候会越来越慢。后面,发现文档的编译一直走的是单线程的,只用到了一个核,顿时感觉有...

    villainhr
  • Node.js多线程完全指南[每日前端夜话0x43]

    很多人都想知道单线程的 Node.js 怎么能与多线程后端竞争。考虑到其所谓的单线程特性,许多大公司选择 Node 作为其后端似乎违反直觉。要想知道原因,必须理...

    疯狂的技术宅
  • Nginx核心模块常用指令

    配置示例 user www www; worker_processes 2; error_log /var/log/nginx-error.log info; ...

    用户1263954
  • webWorker的详解与用法

    JavaScript作为浏览器脚本语言,被定义为了只有单线程的语言,也就是同一时间只能做同一事情。如果JavaScript不是单线程,那么就有点棘手了。比如,与...

    无邪Z
  • 打造多线程 Web

    villainhr

扫码关注云+社区

领取腾讯云代金券