Spark RDD依赖关系

Lineage

RDD之间存在依赖关系,称为Lineage。便于容错。

RDD依赖关系查看

  1. rdd.toDebugString 展示RDD的多级依赖关系,返回string。
(2) MapPartitionsRDD[7] at mapValues at CityADTOP3.scala:37 []
 |  ShuffledRDD[5] at groupByKey at CityADTOP3.scala:27 []
 +-(2) MapPartitionsRDD[4] at map at CityADTOP3.scala:24 []
    |  ShuffledRDD[3] at reduceByKey at CityADTOP3.scala:22 []
    +-(2) MapPartitionsRDD[2] at map at CityADTOP3.scala:16 []
       |  in/agent.log MapPartitionsRDD[1] at textFile at CityADTOP3.scala:14 []
       |  in/agent.log HadoopRDD[0] at textFile at CityADTOP3.scala:14 []
  1. rdd.dependences 返回一个Seq[Dependency[_]]。

 

窄依赖:

一对一 , 多对一

 

宽依赖:

一对多,一个分区的数据被打乱到多个分区中。

 

DAG

DAG 有向无环图,RDD通过一系列转换形成DAG,RDD之间根据不同的依赖关系将DAG划分为不同的Stage。窄依赖:RDD转换操作在一个stage中完成。宽依赖:由于有shuffle存在,只能等到父RDD的所有分区处理完成之后,才能开始后面依赖的计算,因此宽依赖是划分stage的依据,同时也是spark的瓶颈之一。 每个stage之间 需要等上一个stage计算完,才能进行下一个stage的运算,其实就是等shuffle完成。

 

 

任务划分:

RDD任务划分分为:Application->job->satge->task ,一对n ,即:一个Application可对应多个job,一个job可对应多个stage,一个satage可对应多个task。

  1. Application: 初始化一个sparkContext,即生成一个Application。(AM)
  2. job: 一个Action算子就会生成一个job。 rdd.foreach() 一个job; rdd.saveAsTextFile() 另一个job。take算子可以产生多个job,一个分区对应一个job。
  3. stage: 遇到一个宽依赖就会划分一个stage。
  4. task : stage是一个taskSet。将stage划分的结果发送到不同的executoe中执行即为一个task。 一个stage的task数,由最后一个RDD的分区数决定。最后一个RDD有多少个分区,就会产生多少个task数。

 

persist 不会重构血缘关系。

 

检查点:

行动算子触发checkpoint。重构血缘关系。persist 不会重构血缘关系。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spark RDD(弹性分布式数据集)的依赖机制是Spark实现容错性和高效计算的核心机制之一。 在Spark中,每个RDD都表示一个可分区、只读的数据集。RDD之间的依赖关系描述了RDD之间的转换操作,并指示了RDD如何通过转换操作从父RDD生成新的子RDDRDD依赖关系可以分为两种类型:窄依赖(Narrow Dependency)和宽依赖(Wide Dependency)。 1. 窄依赖:当一个父RDD的每个分区只被一个子RDD的一个分区所使用时,我们称之为窄依赖。在这种情况下,Spark可以高效地进行转换操作,而无需重新计算所有的数据。例如,map、filter等转换操作都属于窄依赖。窄依赖允许Spark在计算中进行更多的优化,如任务划分、数据本地性等。 2. 宽依赖:当一个父RDD的分区被多个子RDD的分区所使用时,我们称之为宽依赖。在这种情况下,Spark需要通过将数据进行洗牌(Shuffle)操作来重新组织数据,以满足子RDD的需求。例如,groupByKey、reduceByKey等转换操作都属于宽依赖。洗牌操作需要涉及数据的网络传输和排序,因此会引入额外的开销。 Spark使用DAG(有向无环图)来表示RDD之间的依赖关系。每个RDD都包含其对应的转换操作和所依赖的父RDD。当执行一个Action操作时,Spark会根据RDD之间的依赖关系动态构建执行计划,并将其转化为一系列的任务来执行。 通过依赖机制,Spark可以实现容错性,即当某个分区的数据丢失或计算失败时,可以通过依赖关系重新计算该分区的数据。同时,Spark还可以根据依赖关系进行任务划分和数据本地化等优化,以提高计算效率和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值