1、SparkContext概述

Spark的程序编写是基于SparkContext的,体现在2方面:①Spark编程的核心基础(RDD),第一个RDD是由SparkContext创建的;②Spark程序的调度优化也是基于SparkContext,RDD在一开始不会立即运行,会交给框架,主要是SparkContext。

Spark程序的注册是在SparkContext实例化时候生成的对象来完成的,也就是SchedulerBackend。

Spark程序运行的时候通过Cluster Manager获得具体的计算资源,也是通过SparkContext产生的对象SchedulerBackend来获取的。

SparkContext崩溃或者结束的时候整个Spark程序也结束了。

2、SparkContext中的三大核心对象

SparkContext创建的时候有4大核心:DAGScheduler,TaskScheduler,SchedulerBackend和MapOutputTrackerMaster。

DAGScheduler:面向Job的Stage的高层调度器;

TaskScheduler:是一个接口,根据具体的Cluster Manager的不同会有不同的实现;

SchedulerBackend:是一个接口根据具体的Cluster Manager的不同会有不同的实现,有三大核心功能:①负责与Master连接注册当前程序,②接收集群中为当前应用程序而分配的计算资源Executor的注册,并管理Executor。③负责发送Task到具体的Executor执行;

MapOutputTrackerMaster:负责Shuffle中数据输出和读取的管理。

3、 SparkContext源码

(1)SparkContext的默认构造器必须传入Sparkconf

(2)在SparkContext实例化的时候,默认构造器中所有不在方法中的内容都会被实例化,很多成员都会被赋值,其中有一个关键的代码createTaskScheduler,他调用的时候返回了SchedulerBackend和TaskScheduler具体的实例,然后基又构建了DAGScheduler。

(3)进入createTaskScheduler方法中,他这里面根据不同的模式local模式或者其他模式进行不同的处理。默认情况下local模式task失败不重试,其他模式下失败可以重试。

以Standlone模式进行解读,源码如下,根据传进的url,首先创建TaskSchedulerImpl(底层调度器的核心和灵魂),创建TaskSchedulerImpl的时候必须创建一个Schedulerbackend,在TaskSchedulerImpl.initialize的时候将Schedulerbackend他作为一个参数传入。StandaloneSchedulerBackend是被TaskSchedulerImpl来管理的。

然后进入到TaskSchedulerImpl的initialize方法中,这个主要是确定任务具体的调度方式,这里有两种方式FIFO(默认方式,先进先出的方式)和FAIR。在TaskSchedulerImpl实例调用initialize时首先构建一个调度池SchedulerPool。

(4)createTaskScheduler执行完后返回的TaskScheduler实例为TaskSchedulerImpl,Scheduler的实例为StandaloneSchedulerBackend。代码继续往下走执行_taskScheduler.start(),因为taskScheduler返回的实例是TaskSchedulerImpl,所以调用TaskSchedulerImpl的start方法。

start方法里面调用的是它管理的StandaloneSchedulerBackend的start方法。

(5)在StandaloneSchedulerBackend的start方法中有个Commond比较关键,我们的StandaloneSchedulerBackend向我们的集群进行注册的时候,会把commond传递给master,master会到worker让worker去启动具体进程资源的时候,具体进程的主类的名字,就叫CoarseGrainedExecutorBackend。

(6)CoarseGrainedExecutorBackend是有main方法的入口类,这个就是我们的executor所在进程的入口,我们修改指令就可以修改框架,用自己实现的ExecutorBackend。

在他的main方法中执行run方法的时候

在run方法中new出了CoarseGrainedExecutorBackend这个类的实例

注意:在启动CoarseGrainedExecutorBackend之后就会启动executor,executor启动之后转过来向driver注册,这个话是的。要先注册成功才会分配executor

(7)回到StandaloneSchedulerBackend中,从commond往下走,start的时候new了一个StandaloneAppClient。

进入到StandaloneAppClient这个类中,参数有RpcEnv,mater数组,应用程序的description,还有一个监听器,集群发送事件的时候会被回调

在里面有个重要的内部类ClientEndpoint,在start方法中new出它

在ClientEndpoint启动的时候会有registerWithMaster。这时候开始注册,在注册的时候变成tryRegisterAllMasters,AllMasters是因为有的时候会有多个master,实际上生产环境一定有多个master,做HA。

我们创建一个线程池,在tryRegisterAllMasters注册的时候,从registerMasterThreadPool拿一个线程去注册

在tryRegisterAllMasters是注册给master,所以这里有master的引用,然后就send一个消息过去。这边会发送一个RegisterApplication,他是case class,里面描述了我们应用程序的相关信息,包括名称,使用最大cpu个数,还有每个executor使用的memory的内容等,这里的command就是刚才的command,还有appUiUrl是web上面显示的url

(8)转过来就是交给我们的master去注册,master在收到RegisterApplication的消息之后,通过给worker发送指令启动executor,其实是executorbackend进程去启动executor的。这些所有的executor都要向SchedulerBackend去注册。

4、流程图

SparkContext解析相关推荐

  1. Spark在不同集群中的运行架构

    Spark注重建立良好的生态系统,它不仅支持多种外部文件存储系统,提供了多种多样的集群运行模式.部署在单台机器上时,既可以用本地(Local)模式运行,也可以使用伪分布式模式来运行:当以分布式集群部署 ...

  2. Spark入门实战系列--4.Spark运行架构

    注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1. Spark运行架构 1.1 术语定义 lApplication:Spark Applic ...

  3. SparkCore核心机制详解

    文章目录 1.Spark 核心功能 2.Spark 扩展功能 3.Spark 核心概念 4.Spark 基本架构 5.Spark 编程模型 6.RDD 6.1RDD 概述 6.1.1什么是 RDD 6 ...

  4. Spark系列之Spark在不同集群中的架构

    title: Spark系列 第十二章 Spark在不同集群中的架构 ​ Spark 注重建立良好的生态系统,它不仅支持多种外部文件存储系统,提供了多种多样的集群运行模式.部署在单台机器上时,既可以用 ...

  5. Spark Job Submit分析

    Spark Job Submit 1. Driver向Master注册Application过程 val command = Command("org.apache.spark.execut ...

  6. 大数据【学习计划 or 复习计划】根据【云和 + 达内 + 千锋】课程内容整理

    前言 无论学习或者复习都是需要一个计划大纲的,这里根据三家教育机构的学习计划进行整理,可作为学习计划或复习计划. 云和 第一阶段:大数据开发语言基础 主要内容 核心能力培养 基本程序逻辑.面向对象深入 ...

  7. Spark企业级开发最佳实践

    课程介绍   本课程是世界上第一Spark企业级最佳实践课程,课程包含: Spark的架构设计: Spark编程模型: Spark内核框架源码剖析: Spark的广播变量与累加器: Shark的原理和 ...

  8. 决胜Spark大数据时代企业级最佳实践:Spark CoreSpark SQLGraphXMachine LearningBest Practice

    王家林:Spark.Docker.Android技术中国区布道师. 联系邮箱18610086859@126.com 电话:18610086859 QQ:1740415547 微信号:186100868 ...

  9. 大数据岗位校招Spark面试总结

    Hive 面试总结传送门:大数据岗位校招Hive面试总结 Hadoop 面试总结传送门: 大数据岗位校招Hadoop面试总结 继上一篇Hive相关的面试总结后,本篇总结下Spark相关的问题~ 1.S ...

最新文章

  1. 【模拟】不高兴的津津
  2. 2018-3-25论文(Whale Optimizer Algorithm)+(Gery Wolf Optimizer)笔记三---算法部分的对比
  3. 分布式多层次限流概述
  4. 通过调整Linux内核参数提升网络性能
  5. Python-OpenCV之图片缩放(cv2.resize)
  6. UILabel(富文本)
  7. Windows下pip安装scipy报错no lapack/blas resources found
  8. HHR计划---电商推荐算法
  9. HDU 1712 ACboy needs your help(简单分组DP)
  10. c# 以太坊代币_C代币
  11. jdk HashSet源码解读
  12. 利用unittest+ddt进行接口测试(二):使用yaml文件管理测试数据
  13. 【图像分割】基于matlab贝叶斯算法阙值图像分割【含Matlab源码 1475期】
  14. 小米笔记本pro lol测试软件,小米笔记本Pro游戏实测,MX150显卡竟有猫腻
  15. 道一MD5校验工具发布
  16. POJ:1182 食物链(带权并查集)
  17. python怎么获取向量中非零元素的行号
  18. java牛奶订购系统,Java IO系统
  19. Java体系十大组织
  20. 加州大学欧文计算机排名,2019加州大学欧文分校排名(USNews排名)

热门文章

  1. 前端需要了解的http知识
  2. 【洛谷比赛】你的名字。
  3. 201671010144 2016-2017 《java程序设计》--对象与类!
  4. 字符串数组判断数字,字母汉字,
  5. git 发布android 系统版本 修改版本型号 查看指定文件的修改记录
  6. 实用crontab命令
  7. 博客园配置windows live writer,实现本地代码高亮
  8. linux上安装telnet服务器:linux vmvare虚拟机 安装telnet redhat9
  9. PostgreSQL体系架构
  10. TCP通信过程大讨论