Spark源代码分析之中的一个:Job提交执行总流程概述
Spark是一个基于内存的分布式计算框架。执行在其上的应用程序,依照Action被划分为一个个Job。而Job提交执行的总流程。大致分为两个阶段:
1、Stage划分与提交
(1)Job依照RDD之间的依赖关系是否为宽依赖。由DAGScheduler划分为一个个Stage。并将每一个Stage提交给TaskScheduler;
(2)Stage随后被提交,并由TaskScheduler将每一个stage转化为一个TaskSet;
2、Task调度与运行:由TaskScheduler负责将TaskSet中的Task调度到Worker节点的Executor上运行。
而对于第一阶段Stage划分与提交。又主要分为三个阶段:
1、Job的调度模型与执行反馈;
2、Stage划分。
3、Stage提交:相应TaskSet的生成。
以下。就以图及部分源代码,概略介绍下以上三个阶段。
一、Job的调度模型与执行反馈
1、首先由DAGScheduler负责将Job提交到事件队列eventProcessLoop中。等待调度运行
该事件队列为DAGSchedulerEventProcessLoop类型,内部封装了一个BlockingQueue堵塞队列,并由一个后台线程eventThread不断的调用onReceive()方法处理当中的事件;
2、创建一个JobWaiter对象并返回给client
利用这个JobWaiter对象的awaitResult()方法对Job进行监控与执行反馈。并获得JobSucceeded和JobFailed两种Job执行结果;
3、DAGSchedulerEventProcessLoop的onReceive()方法处理事件
onReceive()方法继续调用doOnReceive(event)方法,然后依据传入的事件类型DAGSchedulerEvent决定调用哪个方法处理事件,这里传入的是JobSubmitted事件。调用的是DAGScheduler的handleJobSubmitted()方法,继而进入下一个阶段。
整个处理流程例如以下图所看到的:
二、Stage划分
在第一阶段将JobSubmitted事件提交到事件队列后。DAGScheduler的handleJobSubmitted()方法就開始了Stage的划分。
首先。依据finalRDD获取其Parent Stages,即ShuffleMapStage列表;
然后,利用finalRDD生成最后一个Stage,即ResultStage;
最后,生成ActiveJob对象,并维护各种stage、job等数据结构。
整个处理流程例如以下图所看到的:
三、Stage提交:相应TaskSet的生成
首先,提交finalStage;
然后,提交其parent Stage,假设相应parent Stage还存在尚未提交的parent Stage。提交之;
最好,对于没有parent Stage的Stage,依据stage中rdd的分区,生成tasks,即TaskSet,创建TaskSetManager,并由SchedulerBackend申请资源。
整个处理流程例如以下图所看到的:
未完待续,明天继续~
Spark源代码分析之中的一个:Job提交执行总流程概述的更多相关文章
- Spark源码分析之一:Job提交运行总流程概述
Spark是一个基于内存的分布式计算框架,运行在其上的应用程序,按照Action被划分为一个个Job,而Job提交运行的总流程,大致分为两个阶段: 1.Stage划分与提交 (1)Job按照RDD之间 ...
- Spark源代码分析之六:Task调度(二)
话说在<Spark源代码分析之五:Task调度(一)>一文中,我们对Task调度分析到了DriverEndpoint的makeOffers()方法.这种方法针对接收到的ReviveOffe ...
- Android多线程分析之中的一个:使用Thread异步下载图像
Android多线程分析之中的一个:使用Thread异步下载图像 罗朝辉 (http://blog.csdn.net/kesalin) CC 许可.转载请注明出处 打算整理一下对 Android Fr ...
- HBase源代码分析之HRegionServer上MemStore的flush处理流程(二)
继上篇文章<HBase源代码分析之HRegionServer上MemStore的flush处理流程(一)>遗留的问题之后,本文我们接着研究HRegionServer上MemStore的fl ...
- HBase源代码分析之HRegionServer上MemStore的flush处理流程(一)
在<HBase源代码分析之HRegion上MemStore的flsuh流程(一)>.<HBase源代码分析之HRegion上MemStore的flsuh流程(二)>等文中.我们 ...
- Oschina 安卓client源代码学习之中的一个
今天主要研究一下两个功能 (1)双击返回键退出程序 (2)接近完美地退出程序 (1) 在非常多应用程序里都有一个功能,就是点击返回键,之后提示你再点击返回键就退出程序. 之前一直非常好奇这是怎么实现的 ...
- Thrift源代码分析(八)--总结加一个完整的可执行的Thrift样例
前面七篇文章分析了Thrfit的方方面面,看到这里时应该对Thrift有了深入的理解. Thrift源代码分析(一)-- 基本概念 Thrift源代码分析(二)-- 协议和编解码 Thrift源代码分 ...
- MapReduce源代码分析之JobSubmitter(一)
JobSubmitter.顾名思义,它是MapReduce中作业提交者,而实际上JobSubmitter除了构造方法外.对外提供的唯一一个非private成员变量或方法就是submitJobInter ...
- Android应用程序内部启动Activity过程(startActivity)的源代码分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6703247 上文介绍了Android应用程序的 ...
随机推荐
- beego实现web api接口
1)程序代码: /** * 类似beego版物联网首页产品数据的调用 */import ( "github.com/astaxie/beego" "githu ...
- WebSocket 笔记
WebSocket介绍 WebSocket+Flask开启一个WebSocket服务 群聊小Demo 私聊小Demo WebSocket介绍 - 菜鸟教程详解连接 - 下载:pip install g ...
- 51nod 01背包
#include<cstdio> #include<algorithm> #define REP(i, a, b) for(int i = (a); i < (b); i ...
- 在 Snoop 中使用 PowerShell 脚本进行更高级的 UI 调试
原文:在 Snoop 中使用 PowerShell 脚本进行更高级的 UI 调试 版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可.欢迎转载.使用.重新发布, ...
- 研究一些复杂java开源软件代码的体会(转)
原文地址:http://herman-liu76.iteye.com/blog/2349026 有时候看源代码是非常有趣的事情,象是思考游戏,象是思考棋局... 平时做J2EE项目中, ...
- 读MBA经历回想(下)做法决定结果——北漂18年(49)
上期聊了目的决定了手段,这次说说详细做法决定了最后的结果. 差额面试被淘汰的高分学员 2005年,是北京邮电大学工商管理学入学考试第一个差额淘汰的年份.意思是过分数线(165分)的人数超过了录取人数, ...
- Java 实现策略(Strategy)模式
策略模式:行为型模式 将同一行为,不同的处理算法分别封装起来.让它们之间能够互相替换 1. 定义一个超类型接口,及 行为方法 2. 定义不同的实现类,实现该行为的 不同的算法 /** * 策略模式:针 ...
- vim-插入格式化时间
最近一直在搞vimrc的配置.其中有一点就是,我想要实现代码快速注释的功能.而这个功能中的一个关键点就是,我要获得系统当前的时间,然后插入到我的注释里面.我知道vimrc支持shell命令,既使用:r ...
- C#制作文本转换为声音的demo,保存音频文件到本地
TTS(Text To Speech)可以实现把文本转换成语音并朗读出来.Windows Xp可以使用Com组件--Microsoft Speech Object Library实现TTS,Windo ...
- 63.note.js之 Mongodb在Nodejs上的配置及session会话机制的实现
转自:https://www.cnblogs.com/alvin_xp/p/4751784.html 1.第一步安装mongodb数据库,这直接官网下载,这里不介绍. 2.也可以使用npm实现直接下载 ...