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

相关推荐
乌恩大侠33 分钟前
【Spark】操作记录
人工智能·spark·usrp
凌不了云41 分钟前
doris通过外部表同步数据
大数据
todoitbo1 小时前
从大数据角度看时序数据库选型:Apache IoTDB的实战经验分享
大数据·apache·时序数据库·iotdb
poemyang1 小时前
从局部性原理到一致性模型:深入剖析缓存设计的核心权衡
缓存·高并发
大数据CLUB2 小时前
酒店预订数据分析及预测可视化
大数据·hadoop·分布式·数据挖掘·数据分析·spark·mapreduce
huisheng_qaq3 小时前
【ElasticSearch实用篇-05】基于脚本script打分
大数据·elasticsearch·script·匹配·社交·脚本打分
芒果要切3 小时前
Redis 使用场景
数据库·redis·缓存
夜郎king3 小时前
MapTalks:国产轻量化二三维一体化GIS引擎
大数据·国产二三维引擎·maptalks引擎
青鱼入云4 小时前
ES脚本语言Painless介绍
大数据·elasticsearch·搜索引擎
Jonathan Star5 小时前
嵌套 Git 仓库(Submodule/子模块)
大数据·git·elasticsearch