Spark-RDD-依赖关系详解

Spark概述

在这里插入图片描述

Spark-RDD概述


Spark-RDD-依赖关系

  • 在Apache Spark中,RDD(Resilient Distributed Dataset)是一种基本的抽象数据结构,代表了分布式的、不可变的数据集。

  • RDD之间的依赖关系在Spark中非常重要,因为它们决定了Spark作业的执行流程和优化方式。

在这里插入图片描述

  • 依赖关系描述了RDD之间的转换关系以及它们之间的依赖关系。简单来说,它指的是RDD之间如何相互关联的。在这里插入图片描述

在这里插入图片描述

  • RDD只支持粗粒度转换,即在大量记录上执行的单个操作。

  • 将创建RDD的一系列Lineage(血统)记录下来,以便恢复丢失的分区。
    在这里插入图片描述

  • RDD的Lineage会记录RDD的元数据信息和转换行为,当该RDD的部分分区数据丢失时,它可以根据这些信息来重新运算和恢复丢失的数据分区。

在这里插入图片描述

在Spark中,RDD的依赖关系分为两种类型:窄依赖(Narrow Dependency)和宽依赖(Wide Dependency)。
在这里插入图片描述

1.窄依赖

在这里插入图片描述

  • 窄依赖发生在父RDD的每个分区最多只被子RDD的一个分区所使用的情况下。

  • 这意味着每个父RDD的分区只需要传输给子RDD的对应分区,而不需要进行数据的混洗(shuffle)操作。
    在这里插入图片描述

  • 窄依赖通常发生在一对一的转换操作,比如map、filter等。

  • 因为每个父RDD分区的数据只会被用于生成一个子RDD分区,所以数据的分区关系可以被简单地维护。

在这里插入图片描述

2.宽依赖

在这里插入图片描述

  • 宽依赖发生在父RDD的每个分区可以被子RDD的多个分区所使用的情况下。

  • 这意味着在子RDD的计算过程中,需要将父RDD的数据进行混洗操作,以确保正确的数据分区被传输给子RDD的各个分区。
    在这里插入图片描述

  • 宽依赖通常发生在需要进行数据混洗的操作,比如groupByKey、reduceByKey等。
    在这里插入图片描述

  • 因为这些操作需要将具有相同键的数据重新分组到同一个分区中,所以需要进行数据的混洗

在这里插入图片描述
具有宽依赖的transformations包括:sort、reduceByKey、groupByKey、join和调用rePartition函数的任何操作。
宽依赖对Spark去评估一个transformations有更加重要的影响,比如对性能的影响。

在不影响业务要求的情况下,要尽量避免使用有宽依赖的转换算子,因为有宽依赖,就一定会走shuffle,影响性能。


3.作业、阶段和任务的关系

当执行一个Spark作业时,Spark会将作业划分为多个阶段(Stage)。这个划分过程基于RDD的依赖关系以及数据的分区情况。

3.1作业(Job):

  • 作业是由一系列RDD的转换操作组成的有向无环图(DAG)。
    在这里插入图片描述

  • DAG中的每个节点代表一个RDD的转换操作,每个边表示一个RDD之间的依赖关系。

  • 作业的执行是惰性的,只有当遇到一个动作操作(Action)时,Spark才会开始执行作业。
    在这里插入图片描述

3.2阶段(Stage):

  • 一个阶段包含了一组可以并行计算的任务,这些任务可以在相同的数据上独立地运行。
  • 阶段的划分基于RDD之间的依赖关系。每当遇到一个宽依赖(Wide Dependency),即需要进行数据混洗(shuffle)的操作,就会划分出一个新的阶段。在这里插入图片描述

在这里插入图片描述

  • 每个阶段中的任务都会处理上一个阶段输出的数据,这些数据被分区为任务数量相等的数据块。

3.3任务(Task):

  • 任务是作业执行的最小单位,它们由Executor上的线程执行。

  • 每个任务都会处理一个RDD分区的数据,这些数据来自上一个阶段的相应分区。

  • 任务的数量通常等于上一个阶段输出的RDD分区的数量。
    在这里插入图片描述

  • 任务之间可以在不同节点上并行执行,但是同一个任务内部是串行执行的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 存储过程(实验报告)

一、实验名称: 存储过程 二、实验日期: 2024 年5 月 25 日 三、实验目的: 掌握MySQL存储过程的创建及调用; 四、实验用的仪器和材料: 硬件:PC电脑一台; 配置:内存&#xff0…

mysql事务 事务并发问题 隔离级别 以及原理

mysql事务 简介:事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 事务四大特性 原子性(Atomici…

多模态交互式 AI 代理的兴起:探索 Google 的 Astra 和 OpenAI 的 ChatGPT-4o应用

OpenAI的发展 聊天GPT-4o 和 谷歌的阿斯特拉 标志着交互式人工智能代理的新阶段:多模式交互式人工智能代理的兴起。这次旅程开始于 Siri 和 Alexa的,它将语音激活的人工智能带入主流用途,并通过语音命令改变了我们与技术的交互。尽管有影响&a…

链表类型的无界阻塞线程安全队列-ConcurrentLinkedQueue(FIFO)

ConcurrentLinkedQueue是非阻塞线程安全(volatile不能完全保证线程安全)的队列,适用于“高并发”的场景。是一个基于链表节点的无界线程安全队列,按照 FIFO(先进先出,尾先进头先出)原则对元素进行排序。队列元素中不可以放置null元素(内部实现的特殊节点除外)。 volati…

linux笔记6--shell相关

文章目录 1. 查看当前的shell类型2. ps -f命令3. 父子shell4. 分号在命令里的作用问题:环境变量echo: 5. sleep和jobssleep:jobs:例子:&: 6. 外部命令和内建命令图解外部命令type命令 7. history命令8. alias命令9. 推荐 1. 查看当前的sh…

2024年推荐的适合电脑和手机操作的线上兼职副业平台

总是会有人在找寻着线上兼职副业,那么在如今的2024年,互联网提供了诸多方便,无论你是宝妈、大学生、程序员、外卖小哥还是打工族,如果你正在寻找副业机会,那么这篇文章将为你提供一些适合电脑和手机操作的线上兼职副业…

【mysql】更新操作是如何执行的

现有一张表,建表语句如下: mysql> create table T(ID int primary key, c int);如果要将 ID2 这一行的a字段值加 1,SQL语句会这么写: mysql> update T set c c 1 where ID 2;上面这条sql执行时,分析器会通过词…

普通人转行程序员,最大的困难是找不到就业方向

来百度APP畅享高清图片 大家好,这里是程序员晚枫,小破站也叫这个名。 我自己是法学院毕业后,通过2年的努力才转行程序员成功的。[吃瓜R] 我发现对于一个外行来说,找不到一个适合自己的方向,光靠努力在一个新的行业里…

CentOS 7.9部署宝塔面板超详细

CentOS7 部署宝塔面板 Linux的宝塔面板搭建起来非常轻松,也可以用一句话来形容,如果喝水一样简单,只需一条命令剩下的交给时间,几分钟就能部署好,然后就可以直接进行登录,直接可以安装LNMP、LAMP平台&…

Linux VIM指令

三种模式 命令模式:控制屏幕光标的移动,字符、字或行的删除等输入对文件的一些指令 插入模式:对文件内容进行文字输入 底行摸索:文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作…

华为机考入门python3--(30)牛客30-字符串合并处理

分类:字符串、进制转换 知识点: 获取偶数下标的字符 even_chars my_str[::2] 获取奇数下标的字符 odd_chars my_str[1::2]) 翻转字符串 reversed_str my_str[::-1] 二进制转十进制 num int(reversed_binary, 2) 十进制转十六进制 …

Java锁的策略

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f649; 内容推荐:<多线程案例(线程池)>&#x1f649; &#x1f439;今日诗词:"你我推心置腹, 岂能相负"&#x1f439; 目录 锁的策略 乐观锁和悲观锁 轻量级锁…

牛客网刷题 | BC99 正方形图案

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 KiKi学习了循环&am…

Linux(四)

Linux&#xff08;四&#xff09; shell脚本shell脚本开发过程创建创建.sh文件编写.sh文件添加执行的权限 chmod 777 1.sh运行 shell中注释shell中变量用户自定义变量 (尽量大写)位置参数即命令行参数预定义变量环境变量 shell中程序和语句说明性语句功能性语句echo 输出read 键…

【深度学习】2.单层感知机

目标&#xff1a; 实现一个简单的二分类模型的训练过程&#xff0c;通过模拟数据集进行训练和优化&#xff0c;训练目标是使模型能够根据输入特征正确分类数据。 演示: 1.通过PyTorch生成了一个模拟的二分类数据集&#xff0c;包括特征矩阵data_x和对应的标签数据data_y。标签…

UniApp 2.0可视化开发工具:引领前端开发新纪元

一、引言 在移动互联网迅猛发展的今天&#xff0c;移动应用开发已经成为前端开发的重要方向之一。为了简化移动应用开发流程&#xff0c;提高开发效率&#xff0c;各大开发平台不断推出新的工具和框架。UniApp作为一款跨平台的移动应用开发框架&#xff0c;自诞生以来就备受开…

航运复兴?大摩不信!

大摩认为&#xff0c;从供需关系来看红海危机只是推迟了航运业下行周期的到来&#xff0c;一旦干扰消除&#xff0c;行业可能重回周期性低迷。 红海危机加剧运力紧张&#xff0c;航运市场价格飞涨。 大摩在24日的一份报告中指出&#xff0c;受红海危机干扰航运市场运力&#…

如何恢复未保存或丢失的Word文档?

许多用户会遇到Word文档未保存而关闭的问题。实际上&#xff0c;您不会立即丢失未保存的文档数据。请不要对文档进行进一步的更改&#xff0c;例如修改并再次保存。您仍然有机会恢复未保存的Word文档。有一些方法可以帮助您恢复未保存的 Word 文档。 如果您不幸遇到这样的问题…

基于单片机设计的多功能数字电压表开发

摘 要&#xff1a;在电路设计中我们时常会用到电压表&#xff0c;过去大部分电压表还是模拟的&#xff0c;虽然精度较高但模拟电压表采用用指针式&#xff0c;里面是磁电或电磁式结构&#xff0c;所以响应较慢。为适应许多高速信号领域目前已广泛使用数字电压表。数字电压表的诞…