窄依赖和宽依赖

Spark宽依赖窄依赖的区别 子RDD的一个分区依赖了父RDD的多个分区,即多个子RDD的分区数据依赖父RDD的同一个分区的数据。NarrowDependency :parent RDD 的一个或多个分区的数据全部流入到 child RDD 的一个或多个分区;ShuffleDependency: parent RDD 的每个分区的不同部分,分别流入到 child RDD 的不同分区。 阅读详情

目录:

一.简介
二.区别
三.stage划分

一.简介

Spark中RDD的高效与DAG图有着莫大的关系,在DAG调度中需要对计算过程划分stage,而划分依据就是RDD之间的依赖关系。针对不同的转换函数,RDD之间的依赖关系分类窄依赖(narrow dependency)和宽依赖(wide dependency, 也称 shuffle dependency)

二.区别

窄依赖是指父RDD的每个分区只被子RDD的一个分区所使用,子RDD分区通常对应常数个父RDD分区(O(1),与数据规模无关)

宽依赖是指父RDD的每个分区都可能被多个子RDD分区所使用,子RDD分区通常对应所有的父RDD分区(O(n),与数据规模有关)

这里写图片描述

相比于宽依赖,窄依赖对优化很有利 ,主要基于以下两点:

1.宽依赖往往对应着shuffle操作(多对一,汇总,多节点),需要在运行过程中将同一个父RDD的分区传入到不同的子RDD分区中,中间可能涉及多个节点之间的数据传输;而窄依赖的每个父RDD的分区只会传入到一个子RDD分区中,通常可以在一个节点内完成转换。

2.当RDD分区丢失时(某个节点故障),spark会对数据进行重算。

a. 对于窄依赖,由于父RDD的一个分区只对应一个子RDD分区,这样只需要重算和子RDD分区对应的父RDD分区即可,所以这个重算对数据的利用率是100%的;
b. 对于宽依赖,重算的父RDD分区对应多个子RDD分区,这样实际上父RDD 中只有一部分的数据是被用于恢复这个丢失的子RDD分区的,另一部分对应子RDD的其它未丢失分区,这就造成了多余的计算;更一般的,宽依赖中子RDD分区通常来自多个父RDD分区,极端情况下,所有的父RDD分区都要进行重新计算。
c. 如下图所示,b1分区丢失,则需要重新计算a1,a2和a3,这就产生了冗余计算(a1,a2,a3中对应b2的数据)。

这里写图片描述

区分这两种依赖很有用。
首先,窄依赖允许在一个集群节点上以流水线的方式(pipeline)计算所有父分区。例如,逐个元素地执行map、然后filter操作;而宽依赖则需要首先计算好所有父分区数据,然后在节点之间进行Shuffle,这与MapReduce类似。

第二,窄依赖能够更有效地进行失效节点的恢复,即只需重新计算丢失RDD分区的父分区,而且不同节点之间可以并行计算;而对于一个宽依赖关系的Lineage图,单个节点失效可能导致这个RDD的所有祖先丢失部分分区,因而需要整体重新计算。

窄依赖的函数有:map, filter, union, join(父RDD是hash-partitioned ), mapPartitions, mapValues
宽依赖的函数有:groupByKey, join(父RDD不是hash-partitioned ), partitionBy

三.stage划分

这里写图片描述

Stage划分思路
因此spark划分stage的整体思路是:从后往前推,遇到宽依赖就断开,划分为一个stage;遇到窄依赖就将这个RDD加入该stage中。因此在图2中RDD C,RDD D,RDD E,RDDF被构建在一个stage中,RDD A被构建在一个单独的Stage中,而RDD B和RDD G又被构建在同一个stage中。
  在spark中,Task的类型分为2种:ShuffleMapTask和ResultTask;简单来说,DAG的最后一个阶段会为每个结果的partition生成一个ResultTask,即每个Stage里面的Task的数量是由该Stage中最后一个RDD的Partition的数量所决定的!而其余所有阶段都会生成ShuffleMapTask;之所以称之为ShuffleMapTask是因为它需要将自己的计算结果通过shuffle到下一个stage中;也就是说图2中的stage1和stage2相当于mapreduce中的Mapper,而ResultTask所代表的stage3就相当于mapreduce中的reducer。

总结
map,filtre为窄依赖,
groupbykey为款依赖
遇到一个宽依赖就分一个stage

每次进步一点点——Spark 中的宽依赖和窄依赖 Spark中RDD的高效与DAG图有着莫大的关系,在DAG调度中需要对计算过程划分stage,而划分依据就是RDD之间的依赖关系。针对不同的转换函数,RDD之间的依赖关系分类窄依赖(narrow dependency)和宽依赖(wide dependency, 也称 shuffle dependency).宽依赖与窄依赖 窄依赖是指父RDD的每个分区只被子RDD的一个分区所使用,子RDD分区通常对应 阅读详情

相关推荐

浅谈Spark中的宽依赖和窄依赖

1、何为Spark中的宽依赖和窄依赖 1.1、官方源码解释 1.1.1、NarrowDependency(窄依赖) /** * :: DeveloperApi :: * Base class for dependencies where each partition of the child RDD depends on a small number * of partitions of the parent RDD. Narrow dependencies allow for pipelin

一个数据小开发的博客 2648

spark.1 rdd 分区 宽依赖 窄依赖 stage job

RDD: rdd是是不可更改的,分区的,可并行执行的分布式数据集。partition是rdd的重要概念也可以说rdd是一组分区数据组成的,而不同的分区可以发送到不同的节点上并行执行,rdd的概念造是数据能够并行执行的基础。 ...

笔生花的博客 1156

Spark RDD的宽依赖和窄依赖

系列文章目录 Spark RDD 的宽窄依赖关系 文章目录系列文章目录Spark RDD 的宽窄依赖关系前言一、RDD的依赖关系?二、如何区分宽依赖和窄依赖?三、为什么要设计宽窄依赖?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 一、RDD的依赖关系? 在 Spark 中,RDD 分区的数据不支持修改,是只读的。如果想更新 RDD 分区中的数

chuangxinge123的博客 2641

Spark 宽窄依赖

面试时被问到spark RDD的宽窄依赖,虽然问题很简单,但是答得很不好。还是应该整理一下描述,这样面试才能答得更好。 看到一篇很好的文章,转载过来了。感觉比《spark技术内幕》这本书讲的好多了。 原文链接:https://www.jianshu.com/p/5c2301dfa360 1.窄依赖 窄依赖就是指父RDD的每个分区只被一个子RDD分区使用,子RDD分区通常只对应常数个父RDD...

weixin_30955341的博客 482

Spark【理论篇】03:宽依赖和窄依赖以及Spark任务三种提交模式

Spark【理论篇】03:宽依赖和窄依赖以及Spark任务三种提交模式

weixin_40612128的博客 2726

Spark中宽依赖详细介绍

在Spark中,宽依赖(Wide Dependency),也被称为Shuffle Dependency,描述了一种更复杂的RDD之间的依赖关系。在宽依赖中,父RDD的多个分区可能被用来计算子RDD的一个分区,这通常涉及到跨节点的数据重分区(即Shuffle操作)。下面详细介绍宽依赖,并通过一个例子进行说明。

优快云 精品推荐 1010

宽依赖和窄依赖

声明:本文已对原博客适当添改(亲测有效),便于本人理解。可通过底部链接访问原博客。   宽依赖与窄依赖      窄依赖指的是每一个父RDD的Partition最多被子RDD的一个Partition使用。      宽依赖指的是多个子RDD的Partition会依赖同一个父RDD的Partition,会引起shuffle。 宽依赖和窄依赖如下图所示: 窄依赖的函数有:map, fi...

https://blog.youkuaiyun.com/sinat_36710456 1805

kaggle注册以及数据集下载全流程

kaggle注册,数据集下载及常见问题

Arriteey的博客 2万+

宽依赖和窄依赖_Spark --【宽依赖和窄依赖】

1.前言《上一节Spark DAG概述》Spark中RDD的高效与DAG图有着莫大的关系,在DAG调度中需要对计算过程划分stage,暴力的理解就是stage的划分是按照有没有涉及到shuffle来划分的,没涉及的shuffle的都划分在一个stage里面,这种划分依据就是RDD之间的依赖关系。针对不同的转换函数,RDD之间的依赖关系分类窄依赖(narrow dependency)和宽依赖(wid...

weixin_34304211的博客 3047

基于任务的后勤智能体:三段构建与演进设计探究

这是系统智能化的核心难点。例如,对于一个“加强连级滩头阵地防御”子任务,系统会根据防御时长、预期敌军攻击强度、地形等因素,计算出所需的弹药(不同弹种的具体数量)、构筑工事的器材、人员的给养和饮水量、以及医疗救护的药品和血包数量。首先进行分词、词性标注等基础处理,然后利用在军事语料库上训练的命名实体识别(NER)模型,提取出关键实体,如任务类型(“夺控作战”)、作战对象(“Y岛”)、时间约束(“D日H时”、“24小时内”)、成功标准(“建立稳固滩头阵地”)、保障重点(“弹药充足”、“及时救治”)等。

weixin_49042442的博客 1088

博途的HMI(触摸屏)的应用

触摸屏(HMI):用于控制PLC,可认为是小型上位机(用于控制PLC的都可认为是上位机)上位机(PC Station):将触摸屏升级为电脑----工控机(工业控制的机器)用博途编写西门子的触摸屏和上位机。

王阿妹小天才的博客 2676

宽依赖和窄依赖_spark的宽依赖窄依赖

1RDD的依赖关系及容错1.1RDD的依赖关系RDD的依赖关系分为两种:窄依赖(Narrow Dependencies)与宽依赖(Wide Dependencies,源码中称为ShuffleDependencies)依赖有2个作用,其一用来解决数据容错的高效性;其二用来划分stage。窄依赖:每个父RDD的一个Partition最多被子RDD的一个Partition所使用(1:1或n:1)。例如...

weixin_36145673的博客 2132

OpenCV实战:用C++和Python实现亚像素边缘检测(附完整代码)

本文详细介绍了使用OpenCV实现亚像素边缘检测的技术,通过C++和Python双语言代码解析,提升工业测量和医学影像中的检测精度。文章涵盖算法原理、核心实现步骤及工业应用案例,帮助开发者掌握亚像素精度处理技术,解决高精度场景中的边缘检测难题。

beer8的博客 375

Spark RDD 的宽依赖和窄依赖

每个团队只需要关注自己的分工,完成自己的任务。例如,一个人将纸张折好,直接传递给下一个人装订,每个步骤只依赖于上一个人完成的内容。这种方式下,任务之间关系简单,直接传递,效率较高。例如,一个人需要从三个不同团队拿到原料,然后再组合成一个产品。这种情况下,团队之间的协调工作多,传递的过程复杂,时间和资源的开销更大。:一个 RDD 的每个分区(partition)仅依赖于父 RDD 中的一个分区。:一个 RDD 的某个分区依赖于父 RDD 中的多个分区。)的数据会被重新分组到一个分区,触发。

z1941563559的博客 1380

基于OpenSSL的CA建立及证书签发(签发多域名/IP)

自签SSL证书(多域名/IP) 本文基于以下环境: 内核信息:Linux zabbix 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux 系统版本:CentOS Linux release 7.6.1810 (Core) OpenSSL版本:OpenSSL 1.0.2k-fips 26 Jan 2017 【前言】 在基于OpenSSL的CA建立及证书签发一文中(后面统.

hobby云说 4647

实战复盘:如何用Frida脚本绕过某书APP的libmsaoaidsec.so检测(附完整Hook代码)

本文深入探讨了如何利用Frida脚本绕过某书APP通过libmsaoaidsec.so实现的反Frida检测机制。通过分析动态链接过程中的关键节点和检测模式,提供了两种实战验证的绕过方案:动态Hook关键链接器函数和静态Patch SO文件。文章还分享了进阶对抗策略和调试技巧,帮助安全研究人员有效应对现代移动安全防护挑战。

weixin_42706667的博客 219

Spark 的宽依赖和窄依赖

Apache Spark 中的依赖关系指的是转换操作(transformations)之间的依赖类型。这些依赖关系决定了任务是如何在集群上分布执行的。依赖关系分为两类:宽依赖(Wide Dependency)和窄依赖(Narrow Dependency)。窄依赖指的是每个父分区最多被一个子分区使用,这意味着子分区的计算只依赖于父RDD的一个分区。因此,在窄依赖中,每个父RDD的分区只需要发送到一个子RDD的分区。

龙大的博客 1354

最详细的 SAP ABAP Web Service 创建和消费步骤讲解

本文原版发表于 SAP 官方社区,当时用的英文版写作,标题为:Step by step to create, consume and trace web service in ABAP system https://blogs.sap.com/2014/05/20/step-by-step-to-create-consume-and-trace-web-service-in-abap-system/ 总共阅读量超过 18 万。 How to create web service provider in A

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3151

宽依赖和窄依赖_Spark宽依赖和窄依赖深度剖析

宽依赖和窄依赖深度剖析.pngRDD依赖关系与stage划分Spark中RDD的高效与DAG图有着莫大的关系,在DAG调度中需要对计算过程划分stage,而划分依据就是RDD之间的依赖关系。1. 窄依赖与宽依赖针对不同的转换函数,RDD之间的依赖关系分为窄依赖(narrow dependency)和宽依赖(wide dependency,也成shuffle dependency)。1.1 窄依赖...

weixin_33514163的博客 753

Holosoma 开源人形机器人强化学习训练部署框架

Holosoma是一个综合性人形机器人框架,支持强化学习策略的训练、部署和动作重定位。该框架兼容多种模拟器(IsaacGym、IsaacSim、MuJoCo等)和机器人(Unitree G1、Booster T1),提供运动控制和全身追踪功能。主要特性包括:跨模拟器训练评估、Wandb集成、多GPU支持、自定义奖励权重和观测噪声配置。推理模块支持实体机器人部署和MuJoCo仿真测试。动作重定位工具可将人体动作数据转换为机器人动作,支持单序列和批量处理。文档详细介绍了训练配置、评估方法和高级功能,如课程学习和

2506_90492529的博客 1828

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

spark中RDD的宽依赖和窄依赖

宽依赖与窄依赖 窄依赖是指父RDD的每个分区只被子RDD的一个分区所使用,子RDD一般对应父RDD的一个或者多个分区。(与数据规模无关)不会产生shuffle。 下面的join也是窄依赖,虽然有两个父RDD,但是两个 RDD中每个分区都被一个子RDD的分区使用,即使父RDD的分区里面的内容并没有让子RDD的一个分区使用。 宽依赖指父RDD的多个分区可能被子RDD的一个分区所使用,子RDD分区通常...

W 481

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

宽依赖和窄依赖_Spark RDD中的依赖关系:宽依赖和窄依赖narrow/widedependency

前言:前面我们讲过,RDD的转化Transformation操作是一个RDD生成另一个新的RDD的过程,那么新的RDD必然依赖原来的RDD。那么RDD的依赖分为几种,分别是什么含义呢?为什么要分类呢?作用是什么?先不说概念,看个例子:请问图(1)和图(2)在对RDD的依赖上有什么区别呢?(1)filter并不依赖map()生成的RDD的所有分区,也就是说即使map没有全部完成我也可以开始filte...

weixin_42310670的博客 1985

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

rdd 宽依赖和窄依赖

Spark中RDD的高效与DAG图有着莫大的关系,   在DAG调度中需要对计算过程划分Stage,   而划分的依据就是就是RDD之间的依赖关系。   针对不同的转换函数,RDD之间的依赖关系分为窄依赖(narrow dependency)   和宽依赖(Wide Depencency,也称为Shuffle Depencency)。窄依赖:指父RDD的每个分区只被子RDD的一个分区所...

weixin_30547797的博客 201

Spark中的宽依赖和窄依赖的区别

开门见山,本文就针对一个点,谈谈Spark中的宽依赖和窄依赖,这是Spark计算引擎划分Stage的根源所在,遇到宽依赖,则划分为多个stage,针对每个Stage,提交一个TaskSet: 上图:一张网上的图: 基于此图,分析下这里为什么前面的流程都是窄依赖,而后面的却是宽依赖: 我们仔细看看,map和filter算子中,对于父RDD来说,一个分区内的数据,有且仅有一个子RDD的...

top8488.top大数据 1084

宽依赖和窄依赖_Spark RDD的宽依赖和窄依赖

1、宽依赖和窄依赖说明由于RDD是粗粒度的操作数据集,每个Transformation操作都会生成一个新的RDD,所以RDD之间就会形成类似流水线的前后依赖关系;RDD和它依赖的父RDD(s)的关系有两种不同的类型,即窄依赖(narrow dependency)和宽依赖(wide dependency)。如图所示显示了RDD之间的依赖关系。从图中可知:窄依赖:是指每个父RDD的一个Partitio...

weixin_32798919的博客 1271
上一篇: spark推测执行(填坑)
下一篇: Hive-自定义UDF
yjgithub
博客等级 码龄11年 53粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值