Spark中宽依赖、窄依赖、Job执行流程

news2024/9/23 5:23:27

一、宽依赖和窄依赖的定义

【宽依赖:】
宽依赖表示同一个父(上游)RDD 的 Partition 被多个子(下游)RDD 的 Partition 依赖,会引起 Shuffle,总结:宽依赖我们形象的比喻为多生。有shuffle阶段

【窄依赖:】
窄依赖表示每一个父(上游)RDD 的 Partition 最多被子(下游)RDD 的一个 Partition 使用,窄依赖我们形象的比喻为独生子女。没有shuffle阶段

二、为什么要区分宽窄依赖

【宽依赖】
Spark可以根据宽依赖进行Stage阶段划分,同一个stage阶段中的都是窄依赖,可以对该阶段内的窄依赖优化

【窄依赖】
Spark可以对窄依赖进行优化:合并操作,形成pipeline(管道),同一个管道中的各个操作可以由同一个线程执行完,且如果有一个分区数据丢失,只需要从父RDD的对应分区做重新计算即可,不需要重新计算整个任务,提高容错

【总结】
窄依赖:并行化+容错
宽依赖:进行阶段划分(shuffle后的阶段需要等待shuffle前的阶段计算完成才能执行)

三、DAG和Stage

【DAG】
Spark的DAG:就是spark任务/程序执行的流程图!
DAG的开始:从创建RDD开始
DAG的结束:到Action结束
一个Spark程序中有几个Action操作就有几个DAG!

【Stage】
为什么要划分Stage?
Spark会根据代码执行流程形成一张有向无环图DAG,在执行的时候可以按照图中的流程顺序进行执行,并进行优化,但是如何优化呢?
对于宽依赖:由于Shuffle的存在,必须等到RDD的shuffle处理完成后,才能开始接下来的计算,所以需要在此处进行Stage的切分
对于窄依赖:RDD之间的数据没有shuffle,多个数据处理可以在同一台机器的内存中完成,所以窄依赖在Spark中被划分为同一个Stage
所以,可以根据宽窄依赖对DAG进行Stage阶段划分,同在一个stage阶段中的就是窄依赖。
在这里插入图片描述
Stage:是DAG中根据shuffle划分出来的阶段!
前面的阶段执行完才可以执行后面的阶段!
同一个阶段中的各个任务可以并行执行无需等待!

1.Application:应用,就是程序员编写的Spark代码,如WordCount代码

2.Driver:驱动程序,就是用来执行main方法的JVM进程,里面会执行一些Drive端的代码,如创建SparkContext,设置应用名,设置日志级别…

3.SparkContext:Spark运行时的上下文环境,用来和ClusterManager进行通信的,并进行资源的申请、任务的分配和监控等

4.ClusterManager:集群管理器,对于Standalone模式,就是Master,对于Yarn模式就是ResourceManager/ApplicationMaster,在集群上做统一的资源管理的进程

5.Worker:工作节点,是拥有CPU/内存等资源的机器,是真正干活的节点

6.Executor:运行在Worker中的JVM进程!

7.RDD:弹性分布式数据集

8.DAG:有向无环图,就是根据Action形成的RDD的执行流程图—静态的图

9.Job:作业,按照DAG进行执行就形成了Job—按照图动态的执行

10.Stage:DAG中,根据shuffle依赖划分出来的一个个的执行阶段!

11.Task:一个分区上的一系列操作(pipline上的一系列流水线操作)就是一个Task,同一个Stage中的多个Task可以并行执行!(一个Task由一个线程执行),所以也可以这样说:Task(线程)是运行在Executor(进程)中的最小单位!

12.TaskSet:任务集,就是同一个Stage中的各个Task组成的集合!

Job提交执行流程

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/61105.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DPD(Digital Pre-Distortion,数字预失真)

什么是DPD 下图中图A是一个理想PA的输入输出关系,它具有线性特性,也就是说输出信号的功率与输入信号功率具有线性关系。但是,现实中使用的PA却不具备理想PA的线性特性。如图C所示,现实PA的输出与输入是非线性关系。为了让非理想P…

HCIA 笔记(1)

一、什么是计算机网络: 二、什么是云技术? 云技术 包含 云存储(百度网盘) 、云计算(分布式计算) 三、计算机技术是怎么实现的? 答:抽象语言(高级语言、汇编语言等&…

数据库、计算机网络,操作系统刷题笔记7

数据库、计算机网络,操作系统刷题笔记7 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle&…

用代码实现全自动化批量下单官网的 iPhone-14-Pro 集成智能下单购物系统,附源码可直接运行

用代码实现全自动化批量下单官网的 iPhone-14-Pro 集成智能下单购物系统,附源码可直接运行。 环境搭建: 1、首先打开谷歌浏览器 输入:chrome://version/ 查看浏览器的版本; 2、打开这个链接: http://chromedriver.storage.googleapis.com/index.html 找到和自己浏览器…

uni-app入门:HBuilderX安装与项目创建

1.HBuilderX下载与安装 2.新建 uni-app 项目并运行到微信开发者工具 1.HBuilderX下载与安装uni-app 官方推荐使用 HBuilderX 来开发 uni-app 类型的项目。 主要好处: 模板丰富 完善的智能提示 一键运行 当然,依然可以根据自己的喜好,选…

(附源码)php小型网络舆情平台设计 毕业设计 252324

小型网络舆情平台设计 摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用php技术建设…

作业11:优化算法比较

目录1. 编程实现图6-1,并观察特征2. 观察梯度方向3. 编写代码实现算法,并可视化轨迹4. 分析上图,说明原理(选做)1) 为什么SGD会走“之字形”?其它算法为什么会比较平滑?2&#xff09…

C#获取子文件夹及其中所有的文件

首先用FolderBrowserDialog获取目标文件夹,如果不要求可视化也可以直接在文本框中输入,从其的SelectedPath属性中就可以获取目标路径。 FolderBrowserDialog folder new FolderBrowserDialog(); folder.ShowDialog(); string Root folder.SelectedPat…

三台机器搭建redis集群过程及问题记录

文章目录1. 前言2. 搭建集群3. 遇到的问题4. 相关文章1. 前言 Redis版本 5.0.4 服务器版本 Linux CentOS 6;CentOS 7;CentOS 9; redis集群需要至少要三个master节点,我们这里搭建三个master节点,并且给每个master再搭…

Spring boot 启动流程及外部化配置

平时我们开发Spring boot 项目的时候,一个SpringBootApplication注解加一个main方法就可以启动服务器运行起来,那它到底是怎么运行起来的呢? Main 入口 我们首先从main方法来看源码,逐步深入: SpringBootApplicatio…

Python实现Stacking回归模型(随机森林回归、极端随机树回归、AdaBoost回归、GBDT回归、决策树回归)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 Stacking通常考虑的是异质弱学习器(不同的学习算法被组合在一起),st…

(附源码)SSM宠物领养系统 毕业设计 031654

SSM宠物领养系统 摘 要 如今,随着人们生活水平不断提高,人们的生活在物质满足的基础上,更多的人将生活的重点放在追求精神享受的过程中。于此同时,Internet铺天盖地的普及,使得这样的人纷纷通过Internet的方式去寻找精…

(十一) 共享模型之无锁【CAS 与 volatile】

一、问题引出(P158) 1. 取款案例 interface Account {// 获取余额Integer getBalance();// 取款void withdraw(Integer amount);/*** 方法内会启动 1000 个线程,每个线程做 -10 元 的操作* 如果初始余额为 10000 那么正确的结果应当是 0*/st…

Seata概述基础

分布式事务原因: 单体架构的spring事务不能跨机器,不能跨数据源 分布式事务的概念: 一个业务流程,在分布式系统(微服务)中,每个业务模块都是一个分支,保证每个业务分支一起成功&am…

ROS1 LTS版本安装教程

Abstract: "ROS is primarily targeted at the Ubuntu , though other Linux systems as well as Mac OS X, Android, and Windows are supported to varying degrees. " 一、系统要求 ROS版本系统版本长期支持ROS Kinetic KameWily: amd64、i386 Xenial: amd64、i…

JSP住宅小区物业管理系统(源代码+开题报告+论文+答辩PPT)科大云炬

小区物业管理毕业设计 (论文) 目 录 摘要--------------------------------------------------------------------------------------------1 ABSTRACT-----------------------------------------------------------------------------------2 第1章…

制作composer包提供sdk扩展

目录 1、初始化包 2、将代码推送到github远程仓库 3、为写好扩展包打上tag标签标记当前代码版本 4、将包发布到包管理平台 初始化包,生成 Creates a basic composer.json file in current directory composer init composer init 按照引导就可以生成了 , 详细的…

Python学习笔记 - 异常处理

前言 为了增强程序的健壮性,计算机程序的编写也需要考虑如何处理一些异常的情况,Python 语言提供了异常处理功能,本博文主要介绍 Python 异常处理机制。 一 异常处理举例 为了学习 Python 异常处理机制,首先看下面进行除法运算的…

MySQL的主从复制与读写分离详解

MySQL的主从复制与读写分离详解读写分离概述什么是读写分离为什么要读写分离什么时候要读写分离MySQL主从复制与读写分离主从复制的概念MySQL支持的复制类型主从复制的工作过程主从复制示例保证MySQL主从服务器时间同步主节点服务器配置从节点服务器设置验证MySQL读写分离MySQL…

Vue3 学习笔记 —— Hooks、全局函数和变量、Vue3 插件

目录 1. Hooks 1.1 Vue2 中的 mixins 1.1.1 mixins 是什么? 1.1.2 mixins 缺点? 1.2 Vue3 中的 Hooks 1.2.1 Vue3 Hooks 是什么? 1.2.2 Vue3 内置 hooks 举例 1.2.3 自定义 Hooks 2. 全局函数和全局变量 2.1 app.config.globalProp…