Spark源码分析之一:Job提交运行总流程概述
来源:互联网 发布:淘宝xboxone手柄会假吗 编辑:程序博客网 时间:2024/05/16 14:47
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对象并返回给客户端
利用这个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源码分析:spark运行总流程
- Spark源码分析-Job提交过程
- 源码-spark运行流程分析
- spark core源码分析6 Spark job的提交
- spark源码阅读2-Job的提交与运行
- Apache Spark源码走读之 Job的提交与运行
- Spark源码分析之job提交后转换为Stage
- hadoop yarn的job提交流程源码分析
- job提交的源码分析
- Job作业提交源码分析
- mapreduce提交job源码分析
- spark 1.6.0 core源码分析6 Spark job的提交
- Spark源码解读之Job提交
- Apache Spark源码走读之2:Job的提交与运行
- Apache Spark源码走读之2 -- Job的提交与运行
- spark源码学习(三):job的提交以及runJob函数的分析
- spark源码分析之DAGScheduler提交作业(job)过程、stage阶段说明
- 【JS学习笔记】内置对象
- Visual Studio 2008 可扩展性开发(六):操作Solution Explorer
- 8VC Venture Cup 2016 - Elimination Round B. Cards (隐式图DFS)
- struts2拦截器配置详解
- p277 第十章 数组和指针
- Spark源码分析之一:Job提交运行总流程概述
- Andriod 判断软键盘弹出并隐藏详解
- SQL Server专家的10个秘诀(翻译加注解)
- 新年第一帖——耍一耍Android 摇一摇功能
- HomeKit 开发指南(中文版)
- android中checkbox文字和复选框的间距设置问题
- CSS基础研究(五)-CSS颜色研究
- JavaScript 中的异常处理
- Ajax 完整教程 (转)