RDD实现管道化,避免中间数据存储;

RDD:是一个分布式对象集合,本质上是一个只读的分区记录集合,每个RDD可分成多个分区,每个分区就是一个数据集片段,并且一个RDD的不同分区可以被保存到集群中不同的节点上,从而可以在集群中的不同节点上进行并行计算;

转换(Transformation):map、join、groupby、filter等;粗粒度修改;不适合网页爬虫;实际上RDD已经被实践证明可以高效地表达许多框架的编程模型(比如MapReduce、SQL、Pregel);

动作(Action):最够一步得出结果;

RDD执行过程:

RDD读入外部数据源进行创建
RDD经过一系列的转换(Transformation)操作,每一次都会产生不同的RDD,供给下一个转换操作使用

最后一个RDD经过“动作”操作进行转换,并输出到外部数据源 

这一系列处理称为一个Lineage(血缘关系),即DAG拓扑排序的结果

优点:惰性调用、管道化、避免同步等待、不需要保存中间结果、每次操作变得简单

RDD运行原理------学习笔记

RDD特点:

1、高效容错性:血缘关系、重新计算丢失分区、无需回滚系统、重算过程在不同节点之间并行、只记录粗粒度的操作;

(传统:数据复制或者记录日志,代价高)

2、中间结果持久化到内存;

3、避免对象序列化和反序列化;

宽依赖:父:子:1:N;

窄依赖:父:子:1:1;N:1;

宽断窄加,实现流水线计算;

Stage的划分:

ShuffleMapStage:不是最终的Stage,在它之后还有其他Stage,所以,它的输出一定需要经过Shuffle过程,并作为后续Stage的输入;这种Stage是以Shuffle为输出边界,其输入边界可以是从外部获取数据,也可以是另一个ShuffleMapStage的输出,其输出可以是另一个Stage的开始;在一个Job里可能有该类型的Stage,也可能没有该类型Stage;

ResultStage:最终的Stage,没有输出,而是直接产生结果或存储。这种Stage是直接输出结果,其输入边界可以是从外部获取数据,也可以是另一个ShuffleMapStage的输出。在一个Job里必定有该类型Stage。

因此,一个Job含有一个或多个Stage,其中至少含有一个ResultStage。

RDD运行原理------学习笔记

(1)创建RDD对象;
(2)SparkContext负责计算RDD之间的依赖关系,构建DAG;
(3)DAGScheduler负责把DAG图分解成多个Stage,每个Stage中包含了多个Task,每个Task会被TaskScheduler分发给各个WorkerNode上的Executor去执行。


相关文章:

  • 2022-01-07
  • 2021-12-21
  • 2021-11-03
  • 2021-12-14
  • 2021-12-18
  • 2021-10-24
  • 2022-12-23
猜你喜欢
  • 2021-04-24
  • 2021-12-06
  • 2022-12-23
  • 2021-12-12
  • 2021-09-25
  • 2022-12-23
  • 2021-05-13
相关资源
相似解决方案