主页 > 新闻资讯 > 谈谈Spark中的宽窄依赖:Spark窄依赖和宽依赖

谈谈Spark中的宽窄依赖:Spark窄依赖和宽依赖

作者:张老师 浏览次数: 2020-02-19 16:54
在Spark框架当中,基于Spark弹性分布式数据集RDD,还涉及到很重要的两个概念就是宽窄依赖,这对于Spark计算性能的提升,起着关键性的作用。今天我们就来谈谈Spark中的宽窄依赖,看看窄依赖和宽依赖在Spark架构运行当中起到的作用。

谈谈Spark中的宽窄依赖

首先对于宽窄依赖,我们要知道它的定义,宽窄依赖实际上指的是弹性分布式数据集RDD与它的父RDD的关系的两种类型,也就是宽依赖和窄依赖。

宽依赖:指的是多个子RDD的Partition会依赖同一个父RDD的Partition,关系是一对多,父RDD的一个分区的数据去到子RDD的不同分区里面,会有shuffle的产生;

窄依赖:指的是每一个父RDD的Partition最多被子RDD的一个partition使用,是一对一的,也就是父RDD的一个分区去到了子RDD的一个分区中,这个过程没有shuffle产生。

宽依赖和窄依赖如何区分呢?最简单的判断方式,就是看父RDD的一个分区的数据的流向,如果是流向一个partition的话就是窄依赖,否则就是宽依赖。

在Spark框架当中,计算任务的运行与宽窄依赖有着紧密的联系。spark应用从提交到运行,会经历以下几个过程:

1.生成逻辑计划

通过应用程序内部RDD之间的依赖关系,构造DAG,其中DAG的每个点是RDD对象,边则是两个RDD之间的转换方式。

2.生成物理计划

根据前一阶段生成的DAG,按照一定的规则进一步生划分为若干个stage,其中每个stage由若干个可以并行计算的任务构成。stage的划分原则是以shuffle依赖为界划分的,将非shuffle依赖的RDD尽可能压缩到一个stage中,同一个stage中,task执行在同一个executor里,避免数据传输。

每个stage内部是窄依赖,stage之间是宽依赖。stage划分还有一个前提,就是spark的惰性计算机制,有了惰性计算,才让宽窄依赖划分成为可能。

3.调度并执行任务

按照依赖关系,调度并计算每个stage,对于给定的stage,将其对应的任务调度给多个Executor同时计算。

谈谈Spark中的宽窄依赖,我们从Spark框架的任务执行过程中就能看出,宽依赖和窄依赖对于任务运行过程中的Stage划分有着关键性的作用,由此也对下游的计算环节产生着关键性的影响。成都加米谷大数据,大数据技术分享,大数据培训班课程,联系客服可获取免费学习资料及课程大纲!
热点排行
推荐文章
立即申请>>