Spark DAG和stage概念简述

496 阅读2分钟

本文正在参加「金石计划 . 瓜分6万现金大奖」

前言

在我们使用sparkUI的时候,DAG和stage的概念随处可见。你知道它们都代表着什么含义吗?本文简单描述一下。

Spark的内存计算有哪些含义:

  1. 分布式数据缓存:

只有需要频繁访问的数据集才有必要cache,对于一次性访问的数据集,cache不但不能提升效率,反而会产生额外的性能开销;

  1. Stage内部的流水线式计算模式:

同一stage中所有操作会被捏合成一个函数,此函数一次性的被应用到输入数据上,并且一次性的产生计算结果。


什么是DAG

在spark的DAG中,顶点是一个个RDD,边则是RDD之间通过 dependencies 属性构成的父子关系。

从开发者的视角出发,DAG的构建是通过在分布式数据集上不停地调用算子来完成的。

Stages的划分

从DAG到Stages的转化: 以Actions算子为起点,从后往前回溯DAG,以shuffle操作为边界去划分Stages.

Stage中的内存计算

基于内存的计算模型,MapReduce提供两类计算抽象,分别是Map和Reduce。

在Spark中,流水线计算模式指的是: 在同一stage内部,所有算子融合为一个函数,stage的输出结果由这个函数一次性作用在输入数据集而产生。

所谓内存计算,不仅仅是指数据可以缓存在内存中,更重要的是让我们明白了,通过计算的融合来大幅提升数据在内存中的转换效率,进而从整体上提升应用的执行性能。

由于计算的融合只发生在stages内部,而shuffle是切割stages的边界,一旦发生shuffle,内存计算的代码融合就会中断。

小结

本文总结了Spark中DAG和stage的概念。熟悉spark的主要概念和模块,能帮助我们更快的入门。