Spark内核源码解析
1.spark内核架构常用术语
Application:基于spark程序,包含一个driver program(客户端程序)和多个executeor(线程)
Driver Progrom:代表着sparkcontext
executeor:某个Application运行在worker node上的一个进程,该进程负责运行Task,并且将数据存储到内存或者磁盘上,每个Application都有各自独立的executeor。
worker node:集群中任何可以运行Application代码的节点。
Task:被传送到某个executeor的工作单元。
Cluster Manager:在集群上获取外部服务(例如:Standalone\Year\Mesos)
job:包含多个Task组成的并行计算,往往有spark的action催生
stage:每个job会被拆分很多组task任务,每组任务被称为stage,也称为TaskSet
RDD:Spark的基本计算单元,可以通过一系列算子进行操作(主要有Transformation和Action)
DAG Scheduler:根据job构建基于Stage的DAG,并提交Stage给Task Scheduler
Task Scheduler:将Taskset提交给worker(集群)运行并回报结果
2.创建SparkContext

1.1 在shell下,spark-submit使用standalone模式提交的时候,其实会通过反射的方式,创建和构造一个Driveractor(和java的actor进程差不多)
1.2 Driver进程在执行我们提交的Application代码的时候,会先构建SparkConf,再构建SparkContext.
1.3 SparkContext在初始化的时候,做的最重要的事情,就是构造DAG Scheduler和Task Scheduler
1.4 TaskScheduler实际上,是会负责与它对应的一个后台进程,去连接Spark集群的Master并注册Application
1.5 Master接收到Application的注册请求后,会使用自己的资源调度算法(基于调度器standalone、Yarn、Mesos等都有不同的调度算法),在Spark集群的Worker上会为i这个Application启动Executor
1.6 Master通知Worker启动Executor后,Worker会为Application启动Executor进程
1.7 Executer启动后,首先做的就是会将自己反向注册给Task Scheduler上去,到此为止SparkContext完成了初始化
3.运行Application

2.1 所有的Executer都会反向注册给Driver programe,Driver Programe当结束SparkContextc初始化后,会继续只想我们编写的代码哦
2.2 每执行一个Action就会创建一个job,job会提交给DAG Scheduler
2.3 DAG Scheduler会采用自己的stage划分算法将job划分为多个stage,然后每个stage会创建一个TaskSet
2.4 DAG Scheduler会将TaskSet传递给Task Scheduler,Task Scheduler会把TaskSet里的每一个Task提交到Worker上的Executer上执行
2.5 Executor每接收一个task都会用TaskRunner来封装task,然后从线程池里面取出一个线程,执行这个task,TaskRunner将我们编写的代码,也就是要执行的算子以及函数,拷贝,反序列化,然后执行Task。
2.6 Task有两种,ShuffleMapTsk和ResultTask。只有最后一个stage是ResultTask,之前的stage,都是ShuffleMapTask.
2.7所以,最后整个应用程序的执行,就是将stage分批次作为taskSet提交给executeor执行,每个task针对RDD的一个partition,执行我们定义的算子和函数,为此类推,知道所有的操作完成为止。
Spark内核源码解析的更多相关文章
- (升级版)Spark从入门到精通(Scala编程、案例实战、高级特性、Spark内核源码剖析、Hadoop高端)
本课程主要讲解目前大数据领域最热门.最火爆.最有前景的技术——Spark.在本课程中,会从浅入深,基于大量案例实战,深度剖析和讲解Spark,并且会包含完全从企业真实复杂业务需求中抽取出的案例实战.课 ...
- Spark SQL源码解析(三)Analysis阶段分析
Spark SQL原理解析前言: Spark SQL源码剖析(一)SQL解析框架Catalyst流程概述 Spark SQL源码解析(二)Antlr4解析Sql并生成树 Analysis阶段概述 首先 ...
- Spark SQL源码解析(四)Optimization和Physical Planning阶段解析
Spark SQL原理解析前言: Spark SQL源码剖析(一)SQL解析框架Catalyst流程概述 Spark SQL源码解析(二)Antlr4解析Sql并生成树 Spark SQL源码解析(三 ...
- Spark SQL源码解析(五)SparkPlan准备和执行阶段
Spark SQL原理解析前言: Spark SQL源码剖析(一)SQL解析框架Catalyst流程概述 Spark SQL源码解析(二)Antlr4解析Sql并生成树 Spark SQL源码解析(三 ...
- Spark SQL源码解析(二)Antlr4解析Sql并生成树
Spark SQL原理解析前言: Spark SQL源码剖析(一)SQL解析框架Catalyst流程概述 这一次要开始真正介绍Spark解析SQL的流程,首先是从Sql Parse阶段开始,简单点说, ...
- Spark Streaming运行流程及源码解析(一)
本系列主要描述Spark Streaming的运行流程,然后对每个流程的源码分别进行解析 之前总听同事说Spark源码有多么棒,咱也不知道,就是疯狂点头.今天也来撸一下Spark源码. 对Spark的 ...
- [源码解析] 深度学习分布式训练框架 horovod (8) --- on spark
[源码解析] 深度学习分布式训练框架 horovod (8) --- on spark 目录 [源码解析] 深度学习分布式训练框架 horovod (8) --- on spark 0x00 摘要 0 ...
- [源码解析] 深度学习分布式训练框架 horovod (9) --- 启动 on spark
[源码解析] 深度学习分布式训练框架 horovod (9) --- 启动 on spark 目录 [源码解析] 深度学习分布式训练框架 horovod (9) --- 启动 on spark 0x0 ...
- [源码解析] 深度学习分布式训练框架 horovod (10) --- run on spark
[源码解析] 深度学习分布式训练框架 horovod (10) --- run on spark 目录 [源码解析] 深度学习分布式训练框架 horovod (10) --- run on spark ...
随机推荐
- JVM锁说明
以前Synchronised关键字加锁效率问题,经常受到吐槽.后来java的开发团队进行了优化,引入了偏向锁.自旋锁.轻量锁,性能有了很大的提升.下面我们来分析下这里面的过程和原理. ...
- MyBatis中<![CDATA[ ]]>的使用
原文地址:https://www.cnblogs.com/catgatp/p/6403382.html <![CDATA[]]>和转义字符 被<![CDATA[]]>这个标记所 ...
- input和textarea的区别
区别: <textarea>标签是成对的,有结束标签进行闭合,标签的内容写在标签对中间:<input>是单个标签,标签的内容通过 value 属性设置: <textare ...
- python中的apply(),applymap(),map() 的用法和区别
平时在处理df series格式的时候并没有注意 map和apply的差异 总感觉没啥却别.不过还是有区别的.下面总结一下: import pandas as pd df1= pd.DataFrame ...
- TXNLP 20-33
文本处理的流程 # encoding=utf-8 import jieba import warnings # 基于jieba的分词 seg_list = jieba.cut("贪心学院专注 ...
- Hadoop-No.4之列式存储格式
列式系统可提供的优势 对于查询内容之外的列,不必执行I/O和解压(若适用)操作 非常适合仅访问小部分列的查询.如果访问的列很多,则行存格式更为合适 相比由多行构成的数据块,列内的信息熵更低,所以从压缩 ...
- 【JZOJ5801】【2018.8.12省选模拟】circular
题目大意 分析 把环拆开 线段其实就是区间 对于每个区间,向在TA后面并且b_i最小的区间连边, 然后从每个区间(ai,bi)开始,在保证跳到的区间(aj,bj),bj<=ai+m的情况下向后倍 ...
- android的ant编译打包
Android本身是支持ant打包项目的,并且SDK中自带一个build.xml文件. 通过该文件,可以对文件进行编译.打包.安装等.并且支持多种方式打包,如debug或者release. 一般的,可 ...
- MessagePack Java Jackson 序列化和反序列化 POJO 为 MessagePack 的数组类型用来与 msgpack-java:0.6 保持兼容性
在 msgpack-java 0.6 或者早期的版本中,POJO 在 MessagePack 中被序列化和反序列化为数组变量. 变量的顺序是基于 Java 类中变量的内部顺序了,这种本来是一种原生的序 ...
- C库函数-fgets()
函数声明:char *fgets(char *str,int n,FILE *stream) 函数介绍:从指定的stream流中读取一行,并把它存储在str所指向的字符串中.当读取到(n-1)个字符时 ...