主页 > 新闻资讯 > Spark Stage划分:Spark Stage与Shuffle的关系

Spark Stage划分:Spark Stage与Shuffle的关系

作者:张老师 浏览次数: 2020-02-24 18:17
Spark框架作为大数据计算的第二代框架,主要的优势就是在计算性能上的优化,因为这使得大规模数据计算的效率和结果反馈的速度,都得到极大的提升,对于大数据的下一步运用,也有更明显的优势。而Spark计算性能的优化,其中涉及到很关键的一部分,就是Spark Stage划分。

Spark Stage划分

Spark Stage划分,贯穿于Spark作业任务的运行之中,涉及到三个环节:

第一步:生成逻辑计划

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

第二步:生成物理计划

根据前一阶段生成的DAG,按照一定的规则进一步生划分为若干个stage,其中每个stage由若干个可以并行计算的任务构成。

这里,就是Spark Stage划分的关键节点。stage的划分原则是以shuffle依赖为界划分的,将非shuffle依赖的RDD尽可能压缩到一个stage中,同一个stage中,task执行在同一个executor里,避免数据传输。

根据RDD不同依赖关系,Spark Stage划分出来的两种类型,是宽依赖和窄依赖

窄依赖:父RDD的每个分区都只被RDD的一个子分区使用,即每个输入分区(父RDD),只有一个输出分区(子RDD),但是一个子分区可能会有多个父分区,换句话说,就是没有shuffle依赖关系的是窄依赖。

宽依赖:一个父RDD分区被子RDD的多个分区使用,会有shuffle发生(一个父分区,输出多个子分区)。

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

第三步:调度并执行任务

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

从以上的Spark任务运行,我们可以看出Spark Stage划分的依据,Spark Stage与Shuffle之间的关系。在Spark框架的学习当中,理解了这些原理,才能更好地理解下一步的运算。成都大数据培训机构,加米谷大数据,大数据技术分享,大数据专业培训,课程大纲及学习资料,可私聊客服领取!
热点排行
推荐文章
立即申请>>