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

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

        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申请资源。

        整个处理流程如下图所示:


        未完待续,明天继续~

相关文章
|
9月前
|
分布式计算 并行计算 大数据
Spark学习---day02、Spark核心编程(RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(一)
Spark学习---day02、Spark核心编程 RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(一)
442 1
|
9月前
|
SQL 分布式计算 API
Spark学习------SparkSQL(概述、编程、数据的加载和保存)
Spark学习------SparkSQL(概述、编程、数据的加载和保存)
185 2
|
4月前
|
分布式计算 资源调度 Hadoop
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
111 2
|
20天前
|
存储 分布式计算 调度
Spark Master HA 主从切换过程不会影响到集群已有作业的运行, 为什么?
Spark Master 的高可用性(HA)机制确保主节点故障时,备用主节点能无缝接管集群管理,保障稳定运行。关键在于: 1. **Driver 和 Executor 独立**:任务执行不依赖 Master。 2. **应用状态保持**:备用 Master 通过 ZooKeeper 恢复集群状态。 3. **ZooKeeper 协调**:快速选举新 Master 并同步状态。 4. **容错机制**:任务可在其他 Executor 上重新调度。 这些特性保证了集群在 Master 故障时仍能正常运行。
|
4月前
|
分布式计算 大数据 Java
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
73 1
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
|
4月前
|
存储 分布式计算 算法
大数据-105 Spark GraphX 基本概述 与 架构基础 概念详解 核心数据结构
大数据-105 Spark GraphX 基本概述 与 架构基础 概念详解 核心数据结构
90 0
|
4月前
|
消息中间件 分布式计算 Kafka
大数据-98 Spark 集群 Spark Streaming 基础概述 架构概念 执行流程 优缺点
大数据-98 Spark 集群 Spark Streaming 基础概述 架构概念 执行流程 优缺点
66 0
|
4月前
|
SQL 存储 分布式计算
大数据-93 Spark 集群 Spark SQL 概述 基本概念 SparkSQL对比 架构 抽象
大数据-93 Spark 集群 Spark SQL 概述 基本概念 SparkSQL对比 架构 抽象
72 0
|
9月前
|
分布式计算 Java Scala
Spark学习---day03、Spark核心编程(RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(二)
Spark学习---day03、Spark核心编程(RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(二)
108 1
|
7月前
|
SQL 弹性计算 资源调度
云服务器 ECS产品使用问题之bin/spark-sql --master yarn如何进行集群模式运行
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。