Spark 的宽窄依赖是什么?

提问者:帅平 问题分类:面试刷题
Spark 的宽窄依赖是什么?
3 个回答
短发也倾城べ为谁留
短发也倾城べ为谁留
在spark中RDD之间有一系列的依赖关系,依赖关系又分为窄依赖和宽依赖。
窄依赖:
父RDD和子RDD partition之间的关系是一对一的。或者父RDD一个partition只对应一个子RDD的partition情况下的父RDD和子RDD partition关系是多对一的。不会有shuffle的产生。
宽依赖
父RDD与子RDD partition之间的关系是一对多。会有shuffle的产生。
发布于:3个月前 (01-22) IP属地:四川省
青衫烟雨べ故人归
青衫烟雨べ故人归
Spark 的调度系统会通过DagScheduler 这个组件把DAG拆分成为不同的运行阶段,也就是Stages,Stages的拆分过程其实是以 Actions 算子为起点,从后向前回溯 DAG,以 Shuffle 操作为边界去划分 Stages。
Spark中的Shuffle其实就是由于重分区的操作而需要移动数据.什么时候产生shuffle其实就是根据RDD的依赖关系,也就是宽窄依赖来决定的了.
当一个RDD可由其他RDD通过使用简单的1-1转换,如filter()、map()、flatMap()等函数得到时,就可以说子RDD与父RDD之间存在1-1的依赖关系。这种依赖被称为窄依赖。这个时候,数据会在包含原始的RDD/父RDD分区的节点上进行转换,不必通过网络与其他executor进行数据传输。在作业执行中,窄依赖中的父子RDD均位于同一个stage内。
当一个RDD可通过一个或多个RDD进行转换生成,并且该转换需要通过网络进行数据转换、重分区,或者需要使用诸如aggregateByKey()、reduceByKey()函数进行数据重分布时,我们就可以说该RDD以shuffle操作的方式依赖于父RDD的参与。这种依赖被称为宽依赖。此时数据无法在包含原始RDD/父RDD分区的同一个节点上进行转换,因此需要通过网络和其他executor进行数据传输。宽依赖为作业执行引入了新的stage.
发布于:3个月前 (01-22) IP属地:四川省
我来回答