Spark之RDD内核原理,RDD的依赖关系,宽窄依赖的算子,DAG有向无环图

  • 学习:知识的初次邂逅
  • 复习:知识的温故知新
  • 练习:知识的实践应用

        在 Spark 中,RDD(Resilient Distributed Dataset,弹性分布式数据集)之间存在依赖关系,以下是关于依赖的定义、依赖的算子以及 DAG(有向无环图)的介绍:

rdd之间是有依赖关系

  • 窄依赖:每一个父RDD的一个分区最多被子RDD的一个分区所使用
  • 宽依赖:一个父RDD的分区会被多个子RDD的分区使用

 

一、依赖的定义

     RDD 的依赖是指一个 RDD 对另一个 RDD 的依赖关系。当一个 RDD 的计算依赖于另一个 RDD 的计算结果时,就说这两个 RDD 之间存在依赖关系。

依赖关系分为两种类型:窄依赖和宽依赖。

1,窄依赖(Narrow Dependency):

  • 窄依赖是指父 RDD 的每个分区最多被一个子 RDD 的分区使用。
  • 例如,map、filter、union 等算子产生的 RDD 之间的依赖关系通常是窄依赖。
  • 窄依赖的特点是可以在单个节点上进行计算,不需要进行数据的 shuffle(数据混洗)操作,因此计算效率较高。

2,宽依赖(Shuffle Dependency):

  • 宽依赖是指父 RDD 的每个分区都可能被多个子 RDD 的分区使用。
  • 例如,groupByKey、reduceByKey、join 等算子产生的 RDD 之间的依赖关系通常是宽依赖。
  • 宽依赖的特点是需要进行数据的 shuffle 操作,将数据从一个节点传输到另一个节点,因此计算效率相对较低。

二、依赖的算子

以下是一些常见的产生依赖关系的算子:

1,窄依赖算子:

  • map:对 RDD 中的每个元素进行映射操作,生成一个新的 RDD。
  • filter:对 RDD 中的元素进行过滤操作,生成一个新的 RDD。
  • flatMap:对 RDD 中的每个元素进行映射操作,将结果扁平化后生成一个新的 RDD。
  • union:将两个 RDD 合并成一个新的 RDD。

2,宽依赖算子:

  • groupByKey:将 RDD 中的元素按照键进行分组,生成一个新的(K,Iterable<V>)类型的 RDD。
  • reduceByKey:对 RDD 中的元素按照键进行聚合操作,生成一个新的(K,V)类型的 RDD。
  • join:将两个 RDD 按照键进行连接操作,生成一个新的(K,(V,W))类型的 RDD。
  • sortByKey:排序

三、DAG 有向无环图

DAG 管理维护rdd之间依赖关系,保证代码的执行顺序,


DAG会根据依赖关系划分stage,每个stage都是一个独立的计算步骤,当发生宽依赖时,会单独拆分一个计算步骤(stage),进行相关数据计算,可以保证每个单独的stage可以并行执行

在发生宽依赖进行shuffle时,会独立的方法执行shuffle计算


拆分计算步骤的本质是为了保证数据计算的并行执行

查看spark的计算过程,通过DAG判断算子是宽依赖还是窄依赖

拆分了计算stage是宽依赖,没有拆分是窄依赖

启动spark的历史日志

start-history-server.sh

1,概念

  • DAG(Directed Acyclic Graph,有向无环图)是 Spark 中用于表示 RDD 之间依赖关系的一种数据结构。
  • DAG 是由顶点和边组成的有向图,其中顶点表示 RDD,边表示 RDD 之间的依赖关系。
  • DAG 中的边分为窄依赖边和宽依赖边,分别对应窄依赖和宽依赖关系。

2,作用

  • DAG 的作用是帮助 Spark 进行任务调度和优化。
  • Spark 根据 DAG 中的依赖关系,将 RDD 的计算任务划分成多个阶段(Stage),每个阶段包含一组相互依赖的任务。
  • Spark 可以根据 DAG 的结构,优化任务的执行顺序,减少数据的 shuffle 操作,提高计算效率。

3,构建过程

  • Spark 在执行 RDD 的计算任务时,会根据 RDD 之间的依赖关系构建 DAG。
  • 当用户提交一个 Spark 应用程序时,Spark 会将应用程序中的 RDD 操作转换为 DAG 中的顶点和边。
  • Spark 会根据 DAG 的结构,将计算任务划分成多个阶段,并为每个阶段分配相应的计算资源。

四,总结

在宽依赖中rdd之间会发生数据交换,这个交换的过程称为rdd的shuffle

  • 只要是宽依赖必然发生shuffle

  • 在宽依赖进行数据交换时,只有等待所有分区数据交换完成后,才能进行后续的计算,非常影响计算速度

        总之,依赖是 Spark 中 RDD 之间的重要关系,依赖的类型分为窄依赖和宽依赖。依赖的算子包括窄依赖算子和宽依赖算子,这些算子在构建 DAG 时起着重要的作用。DAG 是 Spark 中用于表示 RDD 之间依赖关系的一种数据结构,它可以帮助 Spark 进行任务调度和优化,提高计算效率。

1,宽窄依赖最直接的区分方法,查看stage时候又被拆分

  • 学习:知识的初次邂逅
  • 复习:知识的温故知新
  • 练习:知识的实践应用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值