Spark 内核调度之DAG

news/2024/11/17 12:42:04/

文章目录

  • 一、DAG介绍
  • 二、DAG和分区
  • 三、DAG中的宽窄依赖和阶段的划分
    • 1. 宽窄依赖的划分
    • 2. 阶段划分

一、DAG介绍

Spark的核心是根据RDD来实现的,Spark Scheduler则为Spark核心实现的重要一环,其作用就是任务调度。Spark的任务调度就是如何组织任务去处理RDD中每个分区的数据,根据RDD的依赖关系构建DAG,基于DAG划分Stage,将每个Stage中的任务发到指定节点运行。基于Spark的任务调度原理,可以合理规划资源利用,做到尽可能用最少的资源高效地完成任务计算。

DAG(Directed Acyclic Graph)叫做有向无环图,有方向没有闭环,表示有方向没有形成闭环的一个执行流程图。
在这里插入图片描述
上图就是一个典型的DAG图,有方向,从rdd1—>rdd2—>…collect结束;没有闭环,以action算子collect结束整个执行流程。

Action算子返回值不是RDD算子,它的作用是一个触发开关,会将Action算子之前的一串rdd依赖链条执行起来。

Job和Action:

  • 1个Action算子会产生1个DAG,如果在代码中有3个Action,就会产生3个DAG,1个Action产生的1个DAG,会在程序运行中产生一个Job,所以:1个Action=1个Job=1个DAG
  • 如果一个代码中,写了3个Action,那么这个代码运行起来,会产生3个Job,每个Job会有自己的DAG,一个代码运行起来,在Spark中称之为Application
  • 一个Application中,可以有多个Job,每一个Job中含有一个DAG,同时每一个Job都是由一个Action产生的

二、DAG和分区

DAG是Spark代码的逻辑执行图,这个DAG的最终的作用是为了构建物理上的Spark详细执行计划。由于Spark是分布式(多分区)的,那么DAG和分区之间也是有关联的

rdd1 = sc.textFile()
rdd2 = rdd1.flastMap()
rdd3 = rdd2.map()
rdd4 = rdd3.reduceByKey()
rdd4.action()

假设有如上代码,且全部RDD都是3个分区在执行,其带分区关系的DAG图如下:
在这里插入图片描述

三、DAG中的宽窄依赖和阶段的划分

1. 宽窄依赖的划分

窄依赖:父RDD的一个分区,将全部数据发给子RDD的一个分区
在这里插入图片描述

宽依赖:父RDD的一个分区,将数据发给子RDD的多个分区。宽依赖也叫shuffle
在这里插入图片描述

2. 阶段划分

对于Spark来说,会根据DAG,按照宽依赖,划分不同的DAG阶段,划分的依据是从后向前,遇到宽依赖就会划分出一个阶段,称为stage。在这里插入图片描述
如上图,在DAG中,基于宽依赖,将DAG划分成2个stage,在stage的内部都是宽依赖。


http://www.ppmy.cn/news/38556.html

相关文章

6.3 分配学号

任务描述 本关任务:完成学号分配。 输入格式 第一行输入学生姓名‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪;第二行输入班级。 输出格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪…

Java:SpringBoot实现ApplicationEvent事件的监听和发布

通过发布订阅模式实现数据的异步处理,比如异步处理邮件发送 新建SpringBoot项目 项目结构 . ├── pom.xml └── src└── main├── java│ └── com│ └── example│ └── demo│ ├── Application.java│ …

FPGA找工作写简历,你离高薪offer只差一个高端项目,提供工程源码和技术支持

这里写目录标题1、前言2、你或许很菜3、工程源码4、技术支持5、工程源码和技术支持获取方式1、前言 如果你是即将毕业的学生或是想转行做FPGA的工程师,你都会面临一个问题,那就是找工作,找工作的核心就是你的简历,简历的核心就是你…

《代码实例》Element-Ui树形菜单和echarts图

前端代码 EchartsDemo.vue <template><div ><div style"with:800px;height:500px" ref"bar"></div></div></template><script>export default {data(){return {}},methods:{echartsInit(){//初始化容器debugge…

【深入浅出 Yarn 架构与实现】6-2 NodeManager 状态机管理

一、简介 NodeManager&#xff08;NM&#xff09;中的状态机分为三类&#xff1a;Application、Container 和 LocalizedResource&#xff0c;它们均直接或者间接参与维护一个应用程序的生命周期。 当 NM 收到某个 Application 的第一个 container 启动命令时&#xff0c;它会…

Android Kotlin协程coroutine

1.协程coroutine 协程是一种并发设计模式&#xff0c;在Kotlin中使用协程可以简化异步执行的代码&#xff0c;把异步回调代码同步化。 协程&#xff0c;其实就是相互协作的子程序&#xff0c;多个子程序之间通过一定的机制相互关联、协作地完成某项任务。比如一个协程在执行上…

c语言文件操作详解

目录 为什么使用文件什么是文件文件的打开和关闭文件的顺序读写文件的随机读写文本文件和二进制文件文件读取结束的判定文件缓冲区 1.为什么使用文件&#xff1f; 我们前面学习结构体时&#xff0c;写了通讯录的程序&#xff0c;当通讯录运行起来的时候&#xff0c;可以给通…

Android .9图创建后打开后无法编辑

Android Studio 制作出来的9图无法进行拖拉&#xff0c;导致无法制作出正确的9图 使用Android Studio制作&#xff0c;但发现无法进行拖拽&#xff0c;无法制作正确的9图&#xff0c;这几根线无法拖拽。 经网上资料查明得知&#xff0c;原来是png图片的问题&#xff0c;原本的…