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. .Net 跳转

    Action正常跳转 <a href="@Url.Action("AppDownload")">点击下载APP</a> public A ...

  2. 超级硬件代理解决企业Web提速上网问题

    超级硬件代理解决企业Web提速上网问题 需求分析: XX集团是五家企业重组建立的特大型工程勘察设计咨询企业,下设10多个分公司,上网人数众多.有多台WEB server,对外服务,访问量及大.以前无论 ...

  3. 分享一个js对象开发组件写法

    var TextCount = (function(){ //私有方法,外面将访问不到 var _bind = function(that){ that.input.on('keyup',functi ...

  4. linux下pptp配置步骤

    最近买了个VPS,于是随手搭了个VPN玩,ubuntu安装pptp太蠢了,直接apt-install pptp就行了 1./etc/pptpd.conf 注销最后两行,就是设置IP转发的范围,给那么几 ...

  5. python单元测试-unittest

    python内部自带了一个单元测试的模块,pyUnit也就是我们说的:unittest 1.介绍下unittest的基本使用方法: 1)import unittest 2)定义一个继承自unittes ...

  6. 织梦DedeCMS判断简略标题为空时则显示完整标题

    使用织梦DedeCMS系统程序开发网站中,我们会遇到很多因网页版面设计限定的宽度,使文章标题需要进行字数限制,通常做法是在a标签中加入一个title属性,让鼠标放上去的时候显示完整标题.但是标题被剪裁 ...

  7. Linux学习总结(5)——CentOS常用的目录文件操作命令

    CentOS常用的目录文件操作命令 一.路径操作的CentOS常用命令  cd pwd  NO1. 显示当前路径  [root@rehat root]# pwd  NO2. 返回用户主目录  [roo ...

  8. [Python] Wikipedia Crawler

    import time import urllib import bs4 import requests start_url = "https://en.wikipedia.org/wiki ...

  9. hdoj-1593-find a way to escape【数学题】

    find a way to escape Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...

  10. 验证list的底层数据结构

    <STL源代码剖析>中,指出SGI STL的list底层数据结构式循环双向链表.而且在链表尾端留一个空白节点.让end指向它.因为是双向的,那么list的迭代器必须是Bidirection ...