一、概述

Spark源码整体的逻辑(spark1.3.1):

从saveAsTextFile()方法入手

-->saveAsTextFile() 

--> saveAsHadoopFile() 

--> 封装hadoopConf,并传入saveAsHadoopDataset()方法

--> 拿到写出流SaprkHadoopWriter,调用self.context.runJob(self,writeToFile) 

--> runJob方法中,使用dagScheduler划分stage 

--> submitJob开始提交作业

-->任务处理器的post方法启动线程,获取队列中的任务,并调用onRecevie()方法提交任务

-->调用handleJobSubmitted,使用newStage中的getParentStage方法对stage进行切分 

-->getParentStage方法中,使用HashSet、Stack来存放stage和RDD,用栈来存储RDD主要是为了便于后面通过循环进行模式匹配,判断该RDD和父RDD的依赖关系,如果是宽依赖就会生成stage,如果是窄依赖,就会继续找父RDD

二、Spark源码详情

1. 在spark1.3.1的源码中,saveAsTextFile的关键代码在于它内部调用了saveAsHadoopFile()方法。

2. 进入到saveAsHadoopFile()方法中,首先spark会对配置信息进行封装,然后将配置信息传入saveAsHadoopDataset( )方法

3. saveAsHadoopDataset()方法中将会拿到Spark的写出流,并调用runJob方法准备开始提交作业。

4. 进入runJob方法中,会使用dagScheduler进行stage的切分

5. submitJob开始提交作业

6. 获取finalRDD的分区数,并调用任务处理器的post方法,循环取出数据放入队列中

7.  post方法中,将启动一个线程,将获取队列中的任务,并调用onRecevie()方法提交任务

8. 进入onReceive(),可以看到它是一个抽象类中的方法

9. 方法的实现在DAGScheduler中,对方法进行模式匹配。 匹配到任务提交的方法后,调用handleJobSumitted提交任务

10. handleJobSubmitted中,使用newStage中的getParentStage方法对stage进行切分

11. getParentStage方法中,使用HashSet、Stack来存放stage和RDD,用栈来存储RDD主要是为了便于后面通过循环进行模式匹配,判断该RDD和父RDD的依赖关系,如果是宽依赖就会生成stage,如果是窄依赖,就会继续找父RDD

最新文章

  1. json文件
  2. java多线程--线程池的使用
  3. [读码][js,css3]能感知鼠标方向的图片遮罩效果
  4. 查找增强出口和BADI程序
  5. LeetCode "Largest Divisible Subset" !
  6. Redhat7.2 如何修改主机名(hostname)?
  7. bindService初步了解
  8. 使用ffmpeg实现转码样例(代码实现)
  9. ASP.NET MVC- 布署
  10. Laravel 5.4.36 session 没有保存成功问题
  11. ReactiveCocoa - study
  12. 关于sql和MySQL的语句执行顺序(必看!!!)
  13. 3ds max 学习笔记(四)--创建物体
  14. [20180327]行迁移与ITL浪费.txt
  15. [转]AMBA、AHB、APB、ASB总线简介
  16. 《转载》spring定时任务详解(@Scheduled注解)
  17. 用iostat对linux硬盘IO性能进行检测
  18. iOS 用KVC设置结构体
  19. Django权限系统auth模块详解
  20. 将mysql表数据批量导入redis zset结构中

热门文章

  1. idea 多项目部署JRebel
  2. Charles下载和使用
  3. Linux 虚拟机中配置 GNOME + VNC
  4. Best Time to Buy and Sell Stock II--疑惑
  5. C++中虚继承的作用及底层实现原理
  6. 如何将程序添加到Windows桌面右键菜单
  7. CRUD是什么?数据结构、增查删改
  8. nrf52840蓝牙BLE5.0空中速率测试(nordic对nordic)
  9. canny算子求图像边缘,edgebox那部分
  10. Jupyter Notebook 设置黑色背景主题、字体大小、代码自动补全