【赵渝强老师】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图。

相关推荐
好记性+烂笔头1 小时前
4 Hadoop 面试真题
大数据·hadoop·面试
好记性+烂笔头2 小时前
10 Flink CDC
大数据·flink
2的n次方_2 小时前
【Redis】set 和 zset 类型的介绍和常用命令
数据库·redis·缓存
小小のBigData4 小时前
【2025年更新】1000个大数据/人工智能毕设选题推荐
大数据·人工智能·课程设计
risc1234565 小时前
【Elasticsearch 】悬挂索引(Dangling Indices)
大数据·elasticsearch·搜索引擎
青云交6 小时前
Java 大视界 -- Java 大数据在自动驾驶中的数据处理与决策支持(68)
大数据·机器学习·自动驾驶·数据采集·数据存储·数据处理·决策支持
程序猿阿伟6 小时前
《大数据时代“快刀”:Flink实时数据处理框架优势全解析》
大数据·flink
Elastic 中国社区官方博客6 小时前
使用 Ollama 和 Kibana 在本地为 RAG 测试 DeepSeek R1
大数据·数据库·人工智能·elasticsearch·ai·云原生·全文检索
桂月二二6 小时前
使用 Redis Streams 实现高性能消息队列
数据库·redis·缓存