Spark大数据处理讲课笔记----Spark任务调度

news/2024/11/25 21:55:37/

零、本节学习目标

  1. 理解DAG概念
  2. 了解Stage划分
  3. 了解RDD在Spark中的运行流程

一、有向无环图

(一)DAG概念

  • DAG(Directed Acyclic Graph)叫做有向无环图,Spark中的RDD通过一系列的转换算子操作和行动算子操作形成了一个DAG。DAG是一种非常重要的图论数据结构。如果一个有向图无法从任意顶点出发经过若干条边回到该点,则这个图就是有向无环图。“4→6→1→2”是一条路径,“4→6→5”也是一条路径,并且图中不存在从顶点经过若干条边后能回到该点。

 

(二)实例讲解

  • 根据RDD之间依赖关系的不同可将DAG划分成不同的Stage(调度阶段)。对窄依赖来说,RDD分区的转换处理是在一个线程里完成,所以窄依赖会被Spark划分到同一个Stage中;而对宽依赖来说,由于有Shuffle存在,所以只能在父RDD处理完成后,下一个Stage才能开始接下来的计算,因此宽依赖是划分Stage的依据,当RDD进行转换操作,遇到宽依赖类型的转换操作时,就划为一个Stage。

  • A、C、E是三个RDD的实例
  • 当A做groupByKey转换操作生成B时,由于groupByKey转换操作属于宽依赖类型,所以就把A划分为一个Stage,如Stage1。
  • 当C做map转换操作生成D, D与E做union转换操作生成F。由于map和union转换操作都属于窄依赖类型,因此不进行Stage的划分,而是将C、D、E、F加入到同一个Stage中。
  • 当F与B进行join转换操作时,由于这时的join操作是非协同划分,所以属于宽依赖,因此会划分为一个Stage,如Stage2。
  • 剩下的B和G被划分为一个Stage,如Stage3。

二、Stage划分依据

  • Spark会根据DAG将整个计算划分为多个阶段,每个阶段称为一个Stage。每个Stage由多个Task任务并行进行计算,每个Task任务作用在一个分区上,一个Stage的总Task任务数量是由Stage中最后一个RDD的分区个数决定的
  • Stage的划分依据为是否有宽依赖,即是否有Shuffle。Spark调度器会从DAG图的末端向前进行递归划分,遇到Shuffle则进行划分,Shuffle之前的所有RDD组成一个Stage,整个DAG图为一个Stage。

(一)两阶段案例

  • 经典的单词计数执行流程的Stage划分如下图所示。

 

  • 上图中的依赖关系一共可以划分为两个Stage:从后向前进行递归划分,RDD3到RDD4的转换是Shuffle操作,因此在RDD3与RDD4之间划开,继续向前查找,RDD1、RDD2、RDD3之间的关系为窄依赖,因此为一个Stage;整个转换过程为一个Stage。

(二)三阶段案例

  • 下图中的依赖关系一共可以划分为3个Stage:从后向前进行递归划分,由于RDD6到RDD7的转换是Shuffle操作,因此在RDD6与RDD7之间划开,然后继续向前查找,RDD3、RDD4、RDD5、RDD6为一个Stage;由于RDD1到RDD2的转换是Shuffle操作,因此在RDD1与RDD2之间划开,然后继续向前查找,RDD1为一个Stage;整个转换过程为一个Stage。

 

三、RDD在Spark中的运行流程

  • Spark的任务调度流程,即RDD在Spark中的运行流程分为RDD Objects、DAGScheduler、TaskScheduler以及Worker四个部分。

 

(一)RDD Objects

  • 当RDD对象创建后,SparkContext会根据RDD对象构建DAG有向无环图,然后将Task提交给DAGScheduler。

(二)DAGScheduler

  • 将作业的DAG划分成不同Stage,每个Stage都是TaskSet任务集合,并以TaskSet为单位提交给TaskScheduler。

(三)TaskScheduler

  • 通过TaskSetManager管理Task,并通过集群中的资源管理器把Task发给集群中Worker的Executor。

(四)Worker

  • Spark集群中的Worker接收到Task后,把Task运行在Executor进程中,一个进程中可以有多个线程在工作,从而可以处理多个数据分区。

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

相关文章

海康、快仓的机器人增长法则:谋上市、强技术、勤出海

在新一轮全球工业革命的引领下,智能制造应用规模和发展水平大幅跃升,移动机器人(AMR/AGV机器人)应用需求随之水涨船高。 伴随政策利好、技术迭代、需求释放,移动机器人广泛应用于汽车工业、3C电子、烟草行业、物流行业…

小程序容器技术在构建超级App的技术价值

今年来,随着软件及开源技术的发展,软件应用架构的概念也随之流行起来。它提供了一种组织和设计软件系统的有效方法,具有许多优势和好处: 模块化和可维护性:软件应用架构将系统拆分为模块化的组件,每个组件…

javase个人小结

一、数据类型 二、运算符(需要注意的) /:如果是int类型,那么会保留整数,舍去余数 列如:10/3 3 优先级:拿不准就加括号,括号优先级最高 三、类和对象 什么是封装,继承…

VMware快照:简化虚拟化环境管理与数据保护

引言: 在虚拟化环境中,数据保护和灵活性是至关重要的。VMware快照作为一项强大的功能,为虚拟机管理者提供了便利和安全性。本文将介绍VMware快照的使用,以及它为用户带来的几个关键优势。 VMware快照是一项重要的功能&#xff0c…

Vue.js表单输入绑定

对于Vue来说,使用v-bind并不能解决表单域对象双向绑定的需求。所谓双向绑定,就是无论是通过input还是通过Vue对象,都能修改绑定的数据对象的值。Vue提供了v-model进行双向绑定。本章将重点讲解表单域对象的双向绑定方法和技巧。 10.1 实现双…

java基于springboot协同过滤算法的网上图书商城推荐系统m44xq2

开发环境 开发语言:Java 框架:springboot 技术:JSP JDK版本:JDK1.8 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏览器:谷歌浏览器功能介绍 Spring…

前端设计必须知道!7个超实用的工具推荐!

前端网络开发作为一个高薪行业,近年来的繁荣是业内人士所看到的。网络开发工具也在上升,市场上出现了越来越多的前端页面设计工具。但随着前端页面设计工具数量的增加,找到合适的前端页面设计工具来完成工作有时会让开发团队感到困惑。 本文…

位运算符及其相关操作详解

位运算符详解 前言:由于位运算符是直接对二进制数操作,因此对二进制、八进制、十六进制不甚了解的小伙伴建议先看这篇二进制、八进制、十六进制与十进制的相互关系,这样阅读本篇时将事半功倍 总览 位运算是对计算机存储的二进制序列的相应位进…