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

RDD是Spark中的核心数据结构,表现为只读的分布式对象集合。通过转换和动作操作实现计算,形成Lineage(血缘关系)以高效容错。RDD的特点包括容错性、中间结果持久化到内存和避免序列化。Stage的划分包括ShuffleMapStage和ResultStage,DAGScheduler将DAG分解为Stage,TaskScheduler将Task分发给Executor执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

RDD执行过程:

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

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

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

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


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。


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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值