在coresrcmainscalaorgapachesparkSparkContext.scala 路径下,查看SparkContext主类,类中除了方法不执行,其他都执行。

在这里可以看到,一个Executor默认内存是1024M

在这里启动了调度程序,并返回了一个二元组,进入createTaskScheduler方法:

方法中会对提交模式进行匹配:

不同的提交模式,对应不同的逻辑,这里以standalone模式为例:

new了一个TaskSchedulerImpl()对象,对象中传入了sc(SparkContext对象),然后将scheduler封装,创建一个StandaloneSchedulerBackend对象,然后将scheduler进行初始化,返回一个二元组(backend,scheduler)(StandaloneSchedulerBackend,TaskSchedulerImpl)两个对象。

回到最初的调度程序模块,可以看到后续代码,执行了返回对象TaskSchedulerImpl对象的start()方法:

TaskSchedulerImpl中封装了schedulerBackend对象,这里启动的start()方法,就是schedulerBackend对象的 start()方法。

在backend.start()方法有调用了父类的start()方法

在当前的worker中的RPC队列中,创建了一个Endpoint这里完成了Driver对象的注册

ENDPOINT_NAME = "CoarseGrainedScheduler"是driver的名称,也就是在new SparkContext的时候创建了Driver这个Driver的名称是CoarseGrainedScheduler

注册完成之后,StandaloneSchedulerBackend继续往下执行,创建了一个Command对象,然后将Commond对象传入appDesc中,再将appDesc传入client中,之后启动client,向Driver注册application的信息

进入client的start方法,主要设置了rpcEnv.setupEndpoint ,并在其中创建传入了 ClientEndpoint对象。

进入ClientEndpoint对象中在onStart()方法中,会向所有的Master注册当前的application信息,为了保证Master的高可靠,会在集群中创建多个Master

在tryRegisterAllMasters方法中,会去遍历所有的Master地址,然后获取Master的通信邮箱的EndPoint的引用,然后注册一个application

至此Application信息提交到了Master端,进入Master端的RegisterApplication方法中,会先判断Master的状态,如果Master的状态是standBy,那么就忽略,不回复。这里根据Driver端传过来的Driver,Application信息创建了一个application对象。description中有一个command对象,对象中存放了Driver的名称,CoarseGrainedScheduler。

在registerApplication方法中,将要注册的app放在waitingApp中,waitingApps是一个ArrayBuffer

最后再调用RegisterApplication中的scheduler方法,在schedule()方法中,给注册的Application申请资源

在scheduler启动driver,driver启动之后,waitingDrivers--,然后跳出for循环,执行startExecutorsOnWorkers方法。

的driver_Spark源码解析(三)----Driver启动、注册Application相关推荐

  1. Disruptor源码解析三 RingBuffer解析

    目录 系列索引 前言 主要内容 RingBuffer的要点 源码解析 系列索引 Disruptor源码解析一 Disruptor高性能之道 Disruptor源码解析二 Sequence相关类解析 D ...

  2. 基于8.0源码解析:startService 启动过程

    基于8.0源码解析:startService 启动过程 首先看一张startService的图,心里有个大概的预估,跟Activity启动流程比,Service的启动稍微简单点,并且我把Service ...

  3. rocketmq源码解析之name启动(一)

    2019独角兽企业重金招聘Python工程师标准>>> 说在前面 主要解析namrsrv启动部分,namesrv配置加载.netty server创建.注册出处理器. 正文 源码解析 ...

  4. OkHttp3源码解析(三)——连接池复用

    OKHttp3源码解析系列 OkHttp3源码解析(一)之请求流程 OkHttp3源码解析(二)--拦截器链和缓存策略 本文基于OkHttp3的3.11.0版本 implementation 'com ...

  5. .net core 源码解析-mvc route的注册,激活,调用流程(三)

    .net core mvc route的注册,激活,调用流程 mvc的入口是route,当前请求的url匹配到合适的route之后,mvc根据route所指定的controller和action激活c ...

  6. ReactiveSwift源码解析(三) Signal代码的基本实现

    上篇博客我们详细的聊了ReactiveSwift源码中的Bag容器,详情请参见<ReactiveSwift源码解析之Bag容器>.本篇博客我们就来聊一下信号量,也就是Signal的的几种状 ...

  7. 6、RocketMQ 源码解析之 Broker 启动(上)

    上面一篇我们介绍了 RocketMQ 的元数据管理,它是通过自定义一个 KV 服务器.并且其它服务在 NameServer 注册服务信息的时候都是全量注册.如果 RocketMQ 的拓扑图当中有多台 ...

  8. 并发编程与源码解析 (三)

    并发编程 (三) 1 Fork/Join分解合并框架 1.1 什么是fork/join ​ Fork/Join框架是JDK1.7提供的一个用于并行执行任务的框架,开发者可以在不去了解如Thread.R ...

  9. 前端入门之(vuex源码解析三)

    上两节前端入门之(vuex源码解析二)我们把vuex的源码大概的撸了一遍,还剩下(插件.getters跟module),我们继续哈~ 插件童鞋们可以去看看vuex在各个浏览器的状态显示插件,小伙伴可以 ...

  10. 拆轮子-RxDownload2源码解析(三)

    本文为博主原创文章,未经允许不得转载 造轮子者:Season_zlc 轮子用法请戳作者链接 ↑ 前言 本文主要讲述 RxDownload2 的多线程断点下载技术. 断点下载技术前提 服务器必须支持按 ...

最新文章

  1. junit 测试矩阵的幂
  2. Python应用matplotlib绘图简介
  3. selenium2与python自动化4-css元素定位
  4. 零基础如何学习SAP BI模块
  5. GC的作用域,方法区和堆
  6. css随堂笔记(一)
  7. thief book怎么用_战略管理工具箱--30个好用的战略管理好工具
  8. Linux工作笔记-查看某程序安装路径及可执行文件相关链接库
  9. 教你如何在google上查阅一个方位的经纬度
  10. python控制树莓派相机_玩转树莓派-Raspberry,控制单反相机进行可编程摄影
  11. ansi编码转换器安卓版_ANSI Converter-ANSI码转换器
  12. 2020全球C++及系统软件技术大会议程
  13. Flutter时间轴
  14. 短链接java代码_java高仿新浪微博短链接地址生成工具ShortUrlGenerator.java
  15. 将矩阵逆时针旋转45°后输出
  16. 读取groundtruth_rect.txt并转为数组
  17. python和verilog对接_用这个库居然可以使用Python进行FPGA逻辑开发
  18. 【Vue知识点- No2.】vue脚手架、基础API
  19. mamp pro中mysql报错解决
  20. 如何发一条空白的朋友圈或者app昵称名

热门文章

  1. python两个字典合并,两个list合并
  2. 怎样彻底卸载软件?解决卸载残余?例如:总跳出Xftp 6.msi安装-Xftp 6无法访问你试图使用的功能所在的网络位置,单击“确定”重试,或在下面的框中输入包含安装程序包“Xftp 6.msi”文件
  3. TypeError: can‘t send non-None value to a just-started generator-python报错问题
  4. 轻知 | 为什么全球只有13组根域名服务器?
  5. EBITDA的计算公式
  6. 发一则自己创作的Lae程序员小漫画,仅供一乐
  7. LeetCode-Maximal Rectangle-最大矩形
  8. [CLR via C#]16. 数组
  9. if ($this-getRequest()-isPost()) {
  10. java swarm集群_52个Java程序员不可或缺的 Docker 工具