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提交执行总流程概述的更多相关文章

  1. Spark源码分析之一:Job提交运行总流程概述

    Spark是一个基于内存的分布式计算框架,运行在其上的应用程序,按照Action被划分为一个个Job,而Job提交运行的总流程,大致分为两个阶段: 1.Stage划分与提交 (1)Job按照RDD之间 ...

  2. Spark源代码分析之六:Task调度(二)

    话说在<Spark源代码分析之五:Task调度(一)>一文中,我们对Task调度分析到了DriverEndpoint的makeOffers()方法.这种方法针对接收到的ReviveOffe ...

  3. Android多线程分析之中的一个:使用Thread异步下载图像

    Android多线程分析之中的一个:使用Thread异步下载图像 罗朝辉 (http://blog.csdn.net/kesalin) CC 许可.转载请注明出处 打算整理一下对 Android Fr ...

  4. HBase源代码分析之HRegionServer上MemStore的flush处理流程(二)

    继上篇文章<HBase源代码分析之HRegionServer上MemStore的flush处理流程(一)>遗留的问题之后,本文我们接着研究HRegionServer上MemStore的fl ...

  5. HBase源代码分析之HRegionServer上MemStore的flush处理流程(一)

    在<HBase源代码分析之HRegion上MemStore的flsuh流程(一)>.<HBase源代码分析之HRegion上MemStore的flsuh流程(二)>等文中.我们 ...

  6. Oschina 安卓client源代码学习之中的一个

    今天主要研究一下两个功能 (1)双击返回键退出程序 (2)接近完美地退出程序 (1) 在非常多应用程序里都有一个功能,就是点击返回键,之后提示你再点击返回键就退出程序. 之前一直非常好奇这是怎么实现的 ...

  7. Thrift源代码分析(八)--总结加一个完整的可执行的Thrift样例

    前面七篇文章分析了Thrfit的方方面面,看到这里时应该对Thrift有了深入的理解. Thrift源代码分析(一)-- 基本概念 Thrift源代码分析(二)-- 协议和编解码 Thrift源代码分 ...

  8. MapReduce源代码分析之JobSubmitter(一)

    JobSubmitter.顾名思义,它是MapReduce中作业提交者,而实际上JobSubmitter除了构造方法外.对外提供的唯一一个非private成员变量或方法就是submitJobInter ...

  9. Android应用程序内部启动Activity过程(startActivity)的源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6703247 上文介绍了Android应用程序的 ...

随机推荐

  1. Controller接口控制器3

    11.AbstractWizardFormController 向导控制器类提供了多步骤(向导)表单的支持(如完善个人资料时分步骤填写基本信息.工作信息.学校信息等) 假设现在做一个完善个人信息的功能 ...

  2. 关于在天机项目中遇到的常用git 命令

    1. 本地分支和远程分支 1>我们在本地创建分支,第一次push到远程是没有分支存在,执行git push 会有提示,按照提示的内容操作即可,当然我们也可以 git push origin fe ...

  3. PullToRefreshListView中嵌套ViewPager滑动冲突的解决

    PullToRefreshListView中嵌套ViewPager滑动冲突的解决 最近恰好遇到PullToRefreshListView中需要嵌套ViewPager的情况,ViewPager 作为头部 ...

  4. xcode 条件调试

    添加条件 有时候我们可能会在某个循环中创建断点,但一次又一次地点击 continue 直到我们想要的条件出现,显然是一种非常低效的方式.好在 Xcode 为我们提供了条件断点. 首先在下列代码中插入一 ...

  5. 00075_BigInteger

    1.Java中long型为最大整数类型,对于超过long型的数据如何去表示呢.在Java的世界中,超过long型的整数已经不能被称为整数了,它们被封装成BigInteger对象.在BigInteger ...

  6. iOS使用push隐藏子页面底部bottom TabBar

    下面两种情况是我在开发过程中遇到的,一种是代码使用pushViewController,还有一种是storyboard直接使用push.之前也查阅了非常多关于隐藏底部tabbar的资料.可是要么使用起 ...

  7. C# Excel文件导入操作

    Excel文件导出的操作我们经经常使用到,可是讲一个Excel文档导入并显示到界面还是第一次用到. 以下简介下在C#下怎样进行Excel文件的导入操作. 首先加入两个引用 using System.I ...

  8. Objective-C 布尔类型&#160;和 class、SEL类型

    发现非常多刚開始学习的人无法区分bool和BOOL及class类型,今天闲来无事.写个博文做个区分 1. bool是C语言的布尔类型.有true和false,BOOL是Objective C 语言的布 ...

  9. Eclipse怎么导入外来项目

    从File中点击------>import----->General------>然后按下面的图片显示

  10. QT就是别人好心帮你做一些枯燥,并且很重复的代码编写工作,让你更好的把精力投入到你界面的逻辑和功能的实现的功能库(否则写了上万行代码了,才写出个BUG一大堆的毛坯)

    好了,现在开始记录我学习QT的学习历程 . 本人也不是计算机专业出来的,自学了一点,但还是不好找工作,于是参加了培训,虽然感觉没多学到什么 编程的学习生涯就是不断的看别人的源码,然后自己参考着写写自己 ...