一、RDD的设计与运行原理

本文介绍了RDD(弹性分布式数据集)在MapReduce框架中的改进,强调了其数据操作管道化和容错机制,通过DAG拓扑排序减少数据复制与IO开销。讲述了RDD的并行操作、容错设计和中间结果持久化,以及转换和行动操作的特性。
摘要由CSDN通过智能技术生成

1、RDD的背景

(1)MapReduce - 将中间结果写入到HDFS中

目前MapReduce框架都是把中间结果写入到HDFS中,带来了大量的数据复制、磁盘IO和序列化开销。

(2)RDD - 数据操作管道化

RDD将具体的应用逻辑表达为一系列转换处理,不同RDD之间的转换操作形成依赖关系,可以实现数据管道化,避免中间存储的结果,大大降低了数据复制、磁盘IO和序列化开销。

2、RDD概念

一个可并行操作的有容错机制的数据集合,本质上是一个只读的分区记录。

(1)每个RDD可以被分为多个分区
(2)每个分区就是一个数据集片段
(3)每个RDD的不同分区可以保存在不同节点上从而在集群的不同节点进行计算。

2.1、并行操作

并行集合被创建后,即可并行操作。

并行集合被切片后,spark会在集群上为每一个切片运行一个任务。

2.2、容错机制

数据只读,不可修改,若要修改,必须从父RDD转换到子RDD。

RDD是一种天生具有容错机制的特殊集合,不需要通过数据冗余的方式(比如检查点)实现容错,而只需通过RDD父子依赖血缘关系重新计算得到丢失的分区来实现容错,无需回滚整个系统,这样就避免了数据复制的高开销,而且重算过程可以在不同节点之间并行进行,实现了高效的容错。

血缘关系:即DAG拓扑排序结果
(1)采用了
惰性调用
*,通过血缘关系连接起来的一系列RDD操作实现管道化,不用担心有过多中间数据。
(2)一个操作得到的结果不需要保存为中间数据,直接管道化流入到下一个操作进行处理,保证了每个操作在处理逻辑的单一性。

2.3、中间结果持久化

数据在内存中的多个RDD操作之间进行传递,不需要“落地”到磁盘上,避免了不必要的读写磁盘开销。

3、RDD操作

3.1、转换操作(Transform)

(1)指定RDD之间的依赖关系。
(2)接受RDD并返回RDD

3.2、行动操作(Action)

(1)执行计算并指定输出形式;
(2)接受RDD返回一个值或结果集

4、RDD执行过程

在这里插入图片描述
(1)RDD读入外部数据源(或内存中的集合)进行创建;
(2)RDD经过一系列“转换”操作,每次都会产生不同的RDD,供给下一个“转换”使用;

转换操作:只是spark记录下基础数据集及RDD的生成轨迹,即互相之间的依赖关系。

构建起fileRDD和filterRDD之间的依赖关系,形成DAG图,
这时候并没有发生真正的计算,只是记录转换的轨迹;

(3)最后一个RDD经“行动”操作进行计算处理,并输出到外部数据源。

行动操作:真正计算行为。

触发真正的计算。

5、RDD的运行过程

在这里插入图片描述

创建RDD对象;
SparkContext:计算RDD之间的依赖关系,构建DAG;
DAGScheduler:DAG图分解成多个阶段,每个阶段中包含了多个任务,每个任务会被任务调度器分发给各个工作节点(Worker Node)上的Executor去执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随缘清风殇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值