第一层含义:分布式数据缓存
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的计算模型
所谓内存计算,不仅仅是指数据可以缓存在内存中,更重要的是,通过计算的融合来大幅提升数据在内存中的转换效率,进而从整体上提升应用的执行性能。