专栏首页简单聊聊SparkSpark内核分析之DAGScheduler划分算法实现原理讲解(重要)

Spark内核分析之DAGScheduler划分算法实现原理讲解(重要)

        接着上一篇,我们接着来分析下一个非常重要的组建DAGScheduler的运行原理是怎么实现的;通过之前对Spark的分析讲解,我们的Spark作业是在遇到一个action算子以后并以此为界限,划分出一个Job出来,也就是在这个时候,Spark作业向集群提交一个Job任务;下面我们看看源码是如何实现的;

spark Job提交源码图

        通过在任何一个action操作的算子中追踪发现,最终提交一个Job是调用了SparkContext的runJob方法实现的,在该方法中通过dagSchedualer.runJob()正式向集群提交一个Job任务,接下来重点来了,我们来看看DAGScheduler是如何对一个Job进行stage划分的;

提交任务

这里通过eventProcessLoop对象将Job进行提交,下面我们看看在eventProcessLoop中具体发生了什么;

1.首先,创建出与partition数量相等的task;

2.由触发Job提交的那个RDD算子作为作为起点,创建第一个stage并命名为finalStage;

3.对于if条件成立的内容,是针对于本地模式运行的,我们主要来分析一下集群模式下的工作模式,在else逻辑中,我们可以看到调用了submitStage的方法,该方法就是实现stage划分的重要实现;

stage划分算法实现

1.在该方法中我们调用了getMissingParentStages()方法,并将其RDD压入一个栈中;

2.在这个方法中,首先弹栈获得栈顶的RDD,并使用循环反复调用当前RDD所依赖的父RDD,并判断其父RDD是宽依赖还是窄依赖;

3.如果是宽依赖,则创建一个新的stage,并将其加入到missingStage缓存中;如果是窄依赖的话,则将当前的RDD在压入栈中;

4.如此往复,直到一个stage遍历完成;

5.运行完以上动作之后,接着使用递归操作,重复调用submitStage()方法,直到没有父Stage的时候,即方法返回结果为Nil的时候,开始调用submitMissingTask将一个stage(即一个Taskset)提交给TaskScheduler去;

总结:至此,我们的DAGScheduler的stage划分算法基本上就介绍完了,下篇文章我们来接着介绍当一个Taskset被提交给TaskScheduler后,TaskScheduler是如何对一个Taskset集合中的每个Task进行合理分配的,即我们的Task分配算法是如何实现的,欢迎关注。

如需转载,请注明:

上一篇:Spark内核分析之Worker原理分析

本篇:Spark内核分析之DAGScheduler划分算法实现原理讲解(重要)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spark内核分析之spark作业的三种提交方式

            最近在研究Spark源码,顺便记录一下,供大家学习参考,如有错误,请批评指正。好,废话不多说,这一篇先来讲讲Spark作业提交流程的整体架构。

    z小赵
  • Spark性能调优篇八之shuffle调优(重要)

    本篇文章来介绍一个重量级的Spark调优机制,就是我们常说的shuffle调优。在讲解shuffle调优之前,我们先来明确一个概念,什么是shuffle操作?

    z小赵
  • Spark内核分析之Master的注册机制实现原理

            这篇文章我们来讨论一下Master的注册机制;那么有哪些信息需要注册到Master上面去呢?很简单,分别有Worker的注册,Driver的注册...

    z小赵
  • Spark速度比MapReduce快,不仅是内存计算

    作为Hadoop的分布式计算框架,MapReduce扮演着分布式计算的任务,适用于离线批计算任务。Spark本身不具备存储数据功能,通常基于HDFS。我们经常会...

    大数据技术架构
  • 就在今天,Swift 2.2 发布了!(iphone SE等也是)

    2016-03-2213:12:19 发表评论 944℃热度 今天北京时间凌晨1点,iphone的春季发布会召开,可惜太晚,我熬不住,早上一起来必定是ipho...

    timhbw
  • RGW Bucket Shard设计与优化-下

    OMAP过大的OSD服务恢复 当bucket index所在的OSD omap过大的时候,一旦出现异常导致OSD进程崩溃,这个时候就需要进行现场"救火",用最快...

    用户1260683
  • 【挖洞技巧】那个简单的威胁情报

    aerfa
  • 理解和运用Java中的Lambda

    回想一下,JDK8是2014年发布正式版的,到现在为(2020-02-08)止已经过去了5年多。JDK8引入的两个比较强大的新特性是Lambda表达式(下文的L...

    Throwable
  • Django学习(第一天:环境的搭建)python2.7django安装第一个django项目

    罗罗攀
  • pycharm编辑器简单配置-- 持续更新完善

    去 python 官网下载安装,配置环境变量、多版本共存等问题请参见我的另一篇博客: python 基础- python 解释器多版本共存-变量-常量

    suwanbin

扫码关注云+社区

领取腾讯云代金券