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. matlab中用于小数取整的函数的用法
  2. alv导出本地文件DUMP
  3. Bzoj 2749: [HAOI2012]外星人 欧拉函数,数论,线性筛
  4. java 连接redis 以及基本操作
  5. html5 coverflow,使用FancyCoverFlow实现3D无限循环切换视图
  6. 每日一题丨以下哪个SQL查询的结果是2006-01-01 00:00:00
  7. python字典类型写入文件_python 字典写入文件
  8. “能耗大户”数据中心供配电系统
  9. 如何隐藏条形码的数据
  10. C语言找素数的几种方法
  11. 电气能插本计算机类吗,2019年专插本电气工程及自动化专业介绍
  12. 饺子播放器使用IJKPlayer播放MP4文件
  13. 上传身份证照片js_小程序上传身份证图片的实现方法
  14. PO 审批 PO Release
  15. 深入理解FPGA加速原理——不是随便写个C代码去HLS一下就能加速的
  16. pci总线定时协议_PCI总线标准及协议
  17. Excel动态图制作
  18. java虚拟机原理pdf_揭秘Java虚拟机 JVM设计原理与实现pdf
  19. 函数abs 和fabs
  20. uniapp实现附有二维码的图片的本地保存

热门文章

  1. 编写一个程序,清除用户输入字符串中的空格符并将之输出。
  2. python集合翻转教学
  3. Vue编写静态页面框架的基本步骤(实现基本的页面链接跳转)
  4. linux 编译mqtt静态库_Windows 编译 MQTT C++
  5. getMeasuredWidth, getWidth 有什么区别?
  6. Apple Safari 16.5 发布- macOS 专属浏览器 (独立安装包下载)
  7. Shopee虾皮的流量从哪里来?站内外都包括哪些方面呢?
  8. 利用Cocos+Matchvs开发的IO类游戏源码分享
  9. Cocos2d-x 3.2 大富翁游戏项目开发-第二十八部分 游戏保存和载入存档游戏
  10. PHP+mysql商品管理系统-计算机毕业设计源码19895