spark使用了这么长时间,对于driver、master、worker、BlockManage、RDD、DAGScheduler、TaskScheduler这些概念或多或少都了解一些,但是对于其任务的提交,driver、application的调度与注册,资源的分配,executor的创建,job到stage再到task的切分过程,hdfs文件数据的读写操作,RDD本身的map reduce操作,持久化、check point的高可靠性容错性的实现等都没有一个系统和深入的了解,所以准备写个系列的文章,从源码角度探查下这些问题,以此加深对于spark的理解。这里只是列出了我目前感兴趣的点,后期如果有其它想研究的源码点,也会陆续加入该总纲和后面的系列文章中。

我虚拟机中安装的是spark3.0.1版本,所以源码我下载的也是这个。另外因为spark源码过多,为了更有效率的阅读,避免出现读懵的情况,所以我先列出了自己感兴趣的问题点,在源码阅读中也主要是以解决这些问题为主线。问题列表如下:

1、spark-submit如何将jar以及配置参数提交给spark服务器

2、spark如何启动driver、application注册、executor构建命令拼装

3、spark 如何进行driver、executor(application)任务的调度,以及executor向driver的注册

4、executor在worker上的创建过程,其本质是什么,是线程池吗?

5、DAGScheduler TaskScheduler如何配合提交任务,application、job、stage、taskset、task对应关系是什么?

6、spark如何通过BlockManager控制数据的读写

7、RDD cache、persist、checkpoint功能区别和源码解析

源码阅读中会有各种各样的名词术语,这里统一放到总纲中介绍:

Master:spark集群的主节点,管理spark其它节点的资源调度。

Worker:spark集群的工作节点,根据master主节点的管理,其创建并分配一定资源给executor。

Executor:spark最底层的工作线程池,由worker创建和分配资源。其要执行的工作由driver分发。

Driver:用户提交的应用程序代码在spark中运行起来就是一个driver,他是一个特殊的excutor进程,这个进程除了一般excutor都具有的运行环境外,还运行着DAGscheduler Tasksheduler Schedulerbackedn等组件。

Application:用户提交任务执行的总称。

Job:由Action算子触发生成的由一个或者多个stage组成的计算作业

DAGScheduler:根据job构建基于stage的DAG,其切分stage的依据是是否有shuffle操作发生。该对象会将各个stage提交给TaskScheduler进行进一步的任务切分。

stage:job下一级的任务操作粒度,由DAGScheduler依据是否有shuffle操作进行切分

TaskScheduler:接收DAGScheduler传过来的stage,将其转换成taskset任务集(taskset的内容和stage内容相同),最后将Taskset下发给executor进行处理

TaskSet:stage的下一级任务操作粒度,由TaskScheduler生成,其内容和stage内容相同,生成依据是数据的分区数,有几个分区,taskset里面就有几个task。stage转换成taskset的主要目的就是提高数据处理的并行度。

Task:TaskSet集合中的元素,也是最小的可执行任务粒度,由executor调度执行。

RDD:弹性分布式数据集,可以简单的理解为一个数据集合

BlockManager:spark中的文件管理器,管理spark中数据的读写io操作

CheckPoint:将数据持久化到hdfs类似的分布式文件系统上,这样即使本地的持久化数据丢失了,仍然可以从hdfs中获取,增加了系统的高可用和容错特性

另外我们这一系列的源码追踪过程,都是基于一个WordCount程序的远程debug,该wordCount的具体信息和远程debug方式可以参考这篇文章:IDEA远程调试spark-submit提交的jar_Interest1_wyt的博客-CSDN博客

spark源码阅读总纲相关推荐

  1. Windows + IDEA + SBT 打造Spark源码阅读环境

    Spark源码阅读环境的准备 Spark源码是有Scala语言写成的,目前,IDEA对Scala的支持要比eclipse要好,大多数人会选在在IDEA上完成Spark平台应用的开发.因此,Spark源 ...

  2. Spark源码阅读——任务提交过程

    2019独角兽企业重金招聘Python工程师标准>>> Spark 源码阅读--任务提交过程 当我们在使用spark编写mr作业是,最后都要涉及到调用reduce,foreach或者 ...

  3. 3000门徒内部训练绝密视频(泄密版)第2课:Scala面向对象彻底精通及Spark源码阅读

    Scala面向对象彻底精通及Spark源码阅读 不用写public class中的public class Person {private var myName = "flink" ...

  4. 3000门徒内部训练绝密视频(泄密版)第3课:Scala中函数式编程彻底精通及Spark源码阅读

    Scala中函数式编程彻底精通及Spark源码阅读 函数可以不依赖于类,函数可以作为函数的参数,函数可以作为函数的返回值 =>表明对左面的参数进行右面的加工 函数赋值给变量需要在函数名后面加空格 ...

  5. 3000门徒内部训练绝密视频(泄密版)第5课:彻底精通Scala隐式转换和并发编程及Spark源码阅读

    彻底精通Scala隐式转换和并发编程及Spark源码阅读 Akka ,Scala内部并发 隐式转换.隐式类.隐式参数 可以手动指定某种类型的对象或类转换成其他类型的对象或类.转换的原因是假设写好接口 ...

  6. Spark源码阅读——DirectInputDStream

    2019独角兽企业重金招聘Python工程师标准>>> Spark源码分析--DirectInputDStream 在Spark-Streaming中,对流的抽象是使用DStream ...

  7. [以浪为码]Spark源码阅读03 - 序列化介绍 serializer

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u013054888/article/details/90237348 系列文章专栏目录:小浪阅读 S ...

  8. Spark源码阅读环境搭建

    前言 对于Spark的应用,仅仅会使用期API来编程只能达到初级(助理)工程师或中级(熟练)工程师的水平,而学会调优则可以让你进阶为高级工程师.那么怎么才能成为顶尖的工程师呢?源码! 准备工作 (1) ...

  9. Apache Spark源码阅读环境搭建

    文章目录 1 下载源码 2 导入项目 3 新建文件 4 Debug JavaWordCount 4.1 搜索JavaWordCount 4.2 修改参数 4.3 Debug 遇到的报错 1 未设置Ma ...

最新文章

  1. 发那科机器人注油_如何给发那科机器人做三年保养?干货!
  2. 题目3:文本文件单词的检索与计数(实验准备)
  3. 远程桌面连接CentOS7
  4. 思考如何保证线程并行的数据安全性
  5. SQL Server安全(11/11):审核(Auditing)
  6. 计算机一级文档题,计算机一级模拟题
  7. 优秀!师兄妹齐发Science,师妹22岁担任一作!同为曹原中科大校友
  8. android 关闭软键盘失去焦点,Android - html输入在软键盘打开时失去焦点(ASP.net)...
  9. [BZOJ 3028]食物(生成函数)
  10. java mvc上传文件进度_java相关:springMVC+ajax实现文件上传且带进度条实例
  11. oracle 普通数据文件备份与恢复
  12. 麦克纳姆轮平台坐标系说明
  13. linux进程间命名管道,Linux进程间通信
  14. 最大流最小割算法证明
  15. 【转】AB实验设计思路及实验落地 ABtest不平衡
  16. 二维数组主对角线与次对角线输出(C语言)
  17. 23年教资面试开始啦个人报名流程
  18. numpy获取二维数组某一行、某一列
  19. 名编辑电子杂志大师教程 | 如何打开名编辑电子杂志大师帮助文档?
  20. Linux 卷组逻辑卷创建管理和find高级使用 Set UID附加权限(DAY7)

热门文章

  1. goland使用教程
  2. 单细胞测序流程(七)单细胞的细胞类型轨迹分析
  3. java中int取值范围是怎么计算的?
  4. micropython plc_基于PLC的模拟I/O系统的实现
  5. handlebars用法
  6. pl/sql单行注释与多行注释
  7. Gradle安装配置
  8. jy-16-T-STORE——陈子枢总结
  9. python xmlns 解析_Python 解析含有命名空间(xmlns)的xml文件(基于ElementTree)
  10. 组队学习-动手学数据分析