zoukankan      html  css  js  c++  java
  • 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对象并返回给客户端

            利用这个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申请资源。

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

            未完待续,明天继续~

     博客原地址:http://blog.csdn.net/lipeng_bigdata/article/details/50663569

  • 相关阅读:
    电子产品使用感受之—我的iPad Pro坏了。。。
    我最近读了什么书?(随时更新)
    我了解到的新知识之--GDPR
    我了解到的新知识之—MPLS
    我了解到的新知识之—Apple Captive Portal 网页认证登陆公共Wifi
    电子产品使用感受之--无线充电器到底是不是鸡肋?
    大家春节好,过节了也不要忘记来听听我的播客节目哦!
    Python学习笔记之--我又开始学习Python了(随时更新)
    电子产品使用感受之--Mac Mini 买了之后有什么用?-- 开发啊!
    第一次个人编程作业
  • 原文地址:https://www.cnblogs.com/jirimutu01/p/5274453.html
Copyright © 2011-2022 走看看