【赵渝强老师】Spark RDD的依赖关系和任务阶段

Spark RDD彼此之间会存在一定的依赖关系。依赖关系有两种不同的类型:窄依赖和宽依赖。

  • 窄依赖:如果父RDD的每一个分区最多只被一个子RDD的分区使用,这样的依赖关系就是窄依赖;
  • 宽依赖:如果父RDD的每一个分区被多个子RDD的分区使用,这样的依赖关系就是宽依赖。

map、filter、union等操作都是典型的窄依赖操作,如下图所示。通过观察发现,每一个父RDD的分区都只被一个子RDD的分区使用。

注意:join操作可能会比较特殊,某些情况的join是窄依赖操作;但有些情况的join是宽依赖操作。需要具体问题具体分析。

视频讲解如下
【赵渝强老师】Spark RDD的窄依赖关系

宽依赖最典型的操作就是分组,如下图所示。这里父RDD的每一个分区都被多个子RDD的分区使用。

注意:这里的join操作就是一个宽依赖操作。

视频讲解如下
【赵渝强老师】Spark RDD的宽依赖关系

有了RDD之间不同的依赖关系,就可以划分任务执行的阶段,从而构建任务执行的DAG(Directed Acyclic Graph,有向无环图)图。对于窄依赖,分区的转换处理在同一个阶段中完成计算;对于宽依赖,由于有Shuffle的存在,只能在父 RDD处理完成后,子RDD才能开始计算,因此宽依赖是划分任务阶段的标准。下图中的任务一共被划分成了三个不同阶段来执行。

视频讲解如下
【赵渝强老师】如何划分Spark任务的执行阶段

通过借助Spark Web Console可以很方便的查看到任务被划分的阶段以及DAG图。下图是在Web Console查看WordCount任务的DAG图。

相关推荐
言之。2 小时前
大模型嵌入 vs ES:语义搜索与关键字搜索
大数据·elasticsearch·搜索引擎
SirLancelot12 小时前
StarRocks-基本介绍(一)基本概念、特点、适用场景
大数据·数据库·数据仓库·sql·数据分析·database·数据库架构
阑梦清川3 小时前
es的docker部署和docker相关的可可视化面板工具介绍
大数据·elasticsearch·docker
Mr_LiYYD4 小时前
elasticsearch数据迁移
大数据·elasticsearch·搜索引擎
dalianwawatou4 小时前
GitLab 代码基础操作清单
大数据·elasticsearch·gitlab
Costrict5 小时前
解锁新阵地!CoStrict 现已支持 JetBrains 系列 IDE
大数据·ide·人工智能·深度学习·自然语言处理·ai编程·visual studio
阿里云大数据AI技术5 小时前
云栖实录|阿里云 Milvus:AI 时代的专业级向量数据库
大数据·人工智能·搜索引擎
随心............5 小时前
在开发过程中遇到问题如何解决,以及两个经典问题
hive·hadoop·spark
vivo互联网技术6 小时前
vivo HDFS EC 大规模落地实践
大数据·hdfs
2401_837088506 小时前
Redis通用命令
数据库·redis·缓存