Spark 原理篇:DAG与流水线:到底啥叫“内存计算”?

第一层含义:分布式数据缓存

RDD cache

作用:可以将中间RDD缓存在内存,提升再次访问该RDD速度
适用场景:需要频繁访问的数据集才有必要 cache
错误场景:对于一次性访问的数据集,cache 不但不能提升执行效率,反而会产生额外的性能开销

第二层含义:Stage 内的流水线式计算模式

什么是 DAG?

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

DAG 是怎么生成的呢?

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

Stages 的划分(DAG如何转化成多个Stage)

以 Shuffle 操作为边界去划分 Stages


DAG以Shuffle为边界划分出3个Stages

Stage流水线计算模式

计算融合

在同一 Stage 内部,所有算子融合为一个函数,Stage 的输出结果由这个函数一次性作用在输入数据集而产生
作用:无需产生中间结果,一个stage只输出一次当前stage最终结果

对比MapReduce

MR中间结果要落盘,Spark只有当shuffle操作是才会落盘,,如果你曾经也是逢 RDD 便 cache,应该不难想象,采用这种计算模式,Spark 的执行性能不见得比 MapReduce 强多少,尤其是在 Stages 中的算子数量较多的时候。


Hadoop MapReduce的计算模型

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。