深入 RDD_定义_RDD 的特点 | 学习笔记

简介: 快速学习 深入 RDD_定义_RDD 的特点

开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段深入 RDD_定义_RDD 的特点】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/689/detail/11962


深入 RDD_定义_RDD 的特点


内容介绍:

一、惰性求值

二、RDD 可分区。

三、RDD 是只读的

四、RDD 可容错

 

一、惰性求值

通过对 rdd 特点的了解呢,对 rdd 整个的运算过程会有更清晰的认识,有助于以后写代码,理解r dd 的原理,去了解一下 rdd 的特点,rdd 第一个特点,也是非常重要的一个特点,就是 rdd 虽然叫做弹性分布式数据集,但是他不仅是数据集,也是一种编程模型。

image.png

甚至这个数据集有一个特点,就是它可能根本就没有保存数据,他和之前的一个大集合里面存了一堆数据是不太一样,它主要偏向于的是计算,所以rdd不仅是数据集还是一个编程模型。与 scala 做一个对比之后会发现,如下图:

Scala

source.flatMap(_.split("

.map((_,1))

groupBy(_._1)

.map(t => (t._1,t._2.size)).toList

Spark

source.flatMap(_.split("

.map((.1))

.reduceByKey(_+_)

.collect

RDD 的算子大致分为两类:

Transformation 转换操作例 如map flatMap filter

Action 动作操作,例如 reduce collect show

执行 RDD 的时候,在执行到转换操作的时候,并不会立刻执行,直到遇见了 Action 操作,才会触发真正的执行,这个特点叫做惰性求值。

上图的代码中,scala spark rdd 的写法很相似。第一点是都可以写成链式。第2点,他们都通过算子传入函数来执行对数据的操作,rdd 本身的操作呢跟 scala 当中的这个集合的运算是非常相似的,在 rdd 当中有两类算子,这一点 scala 有一些区别。首先 rdd 当中第一类算子称之为叫做 transformation 转换操作,第二类算子称之为叫做 action 动作操作,那么转换操作它主要目的是定义一张执行图,好,rdd 并不是直接对算子进行计算。而是先去把整个的执行计划生成,有一个执行计划之后。

当一个 action 操作被执行的时候,触发这个执行计划的执行去执行这个执行计划,这是 rdd 的特点,和 scala 当中非常不一样的特点。那么这个特点称之为叫做堕性求值。更准确更清晰的表述就是 transformation 转换的操作例如 map filter 这样的一些操作,并不触发 rdd 的执行,而只有执行的 reduce client show 这样的一些操作的时候,整个 rdd 它才会化为 job 运行到集群当中去求结果。主要生成一个类似于图的东西,图表达了 rdd 的计算逻辑,在进行action 操作去触发图的调动。

 

二、rdd 可分区。

Rdd 是可分区的,因为 rdd 是可以进行并行计算的框架,如果没有分区,无法把任务划分。

image.png

Rdd 的分区就是拆分任务,同时,只要有足够信息数据的来源,甚至可以不用严格保存数据,这个特点本质上就是把一个任务划分为小任务的过程。

RDD 是一个分布式计算框架,所以,一定是要能够进行分区计算的,只有分区了,才能利用集群的并行计算能力

同时,RDD 不需要始终被具体化,也就是说:RDD 中可以没有数据,只要有足够的信息知道自己是从谁计算得来的就可以,这是一种非常高效的容错方式。

 

三、rdd 是只读的

Rdd 只读,rdd 一旦生成,绝不可能发生变化。因为 rdd 存储在 hdfs 中,Hdfs 的文件只允许一种修改,是append,并且这个 append 是为了 hbase 而强行加上去的。

image.png

对于 rdd 来说,数据已经分布到集群当中了,如果想要随机访问这个 rdd 的某一个文件进行修改的话,就需要找到数据在哪里,还需要一系列繁琐操作,代价较高。所以 rdd 只能可读。

第一个原因是因为 rdd 可能只是进行数据流通,里面没有储存数据,所以不需修改。第二个原因是如果加入支持修改的话,就需要保存数据,显然这违背了 rdd 的初衷。第三个原因是如果需要修改数据,就需要找到数据具体位置,这显然很难做到。

 

四、rdd 可容错

任何计算系统当中,容错是一定要考虑的。对于 rdd 是一定要容错的措施。有俩种措施,第一种是保存 rdd 的依赖关系,如果 rdd2出现问题,那么就要保存 rdd1的信息,再重新计算,那么就需要保存俩部分信息,第一部分是 rdd 的父属是谁?Rdd2的父属是怎么计算出 rdd2的?

第二种措施是 Rdd2有可能会出错,那么就需要将 rdd2缓存下来。如果出错,有了缓存,就可以直接计算出结果。

image.png

RDD 的容错有两种方式·保存 RDD 之间的依赖关系,以及计算函数,出现错误重新计算。直接将 RDD 的数据存放在外部存储系统,出现错误直接读取,Checkpoint

 

五、总结

以上是 rdd 的一些特点,现在进行一个回顾。首先第一点是 rdd 不仅是数据集还是编程模型,rdd 的算子分为俩大类,第一类是 transformation,第二类是 action

Rdd 还有一大特性叫惰性求值,也就是当 transformation 这个算子在执行的时候,并不会真的被执行,而只有在action 执行的时候,整体的过程才会被流转,才会被执行。

第二个特点是 rdd 可分区,分区了才有将任务分片的能力。

第三个特点是 rdd 是只读的,只有只读的特点,rdd 才能有这么高的间断性,而 rdd 才会保持足够的间断性,而 rdd是可以容错,常用手段有两种,第一种是追溯,第二种是制数据保存数据。

相关文章
|
25天前
|
存储 JSON 关系型数据库
如何在MySQL中查询存储为JSON格式的数据
以上就是在MySQL中查询JSON格式数据的一些方法。在实际使用中,针对不同的查询需求,要选择合适的JSON路径表达式和函数进行数据查询。随着实际情况的复杂性增加,可能会需要更复杂的路径表达式和JSON处理函数的组合来实现目标。尽管介绍的内容较为综合,但目的是为了给出一个可操作的视野,来处理存储在MySQL中的JSON数据。在对这些方法有了一定了解之后,可以更进一步地深入学习和探索更多高级的用法。
110 8
|
存储 Linux 数据安全/隐私保护
安装部署milvus单机版(快速体验)
安装部署milvus单机版(快速体验)
3677 0
|
10月前
|
机器学习/深度学习 存储 测试技术
RT-DETR改进策略【模型轻量化】| EMO:ICCV 2023,结构简洁的轻量化自注意力模型
RT-DETR改进策略【模型轻量化】| EMO:ICCV 2023,结构简洁的轻量化自注意力模型
418 0
RT-DETR改进策略【模型轻量化】| EMO:ICCV 2023,结构简洁的轻量化自注意力模型
|
JavaScript Java 关系型数据库
在线视频教育平台|基于Springboot的在线视频教育平台系统设计与实现(源码+数据库+文档)
在线视频教育平台|基于Springboot的在线视频教育平台系统设计与实现(源码+数据库+文档)
685 0
|
IDE 安全 Java
Java安装教程 - 从下载到配置环境变量,轻松掌握Java的安装步骤
Java安装教程 - 从下载到配置环境变量,轻松掌握Java的安装步骤
|
前端开发 JavaScript Java
校园志愿者|基于Springboot校园志愿者管理系统
校园志愿者|基于Springboot校园志愿者管理系统
499 2
|
前端开发 PHP 开发者
PHP编程中的异常处理与调试技巧
在PHP编程中,异常处理和调试是至关重要的环节。本文将深入探讨PHP中异常处理的机制,介绍常见的异常类型以及如何合理地进行异常处理。同时,还将分享一些实用的调试技巧,帮助开发者快速定位和解决问题,提高代码质量和效率。
164 31
|
安全 Java 测试技术
【开题报告】基于SpringBoot的民宿在线预定系统的设计与实现
【开题报告】基于SpringBoot的民宿在线预定系统的设计与实现
968 0
|
数据采集 数据可视化 算法
深入解析ERP系统的业务智能与报表分析模块
深入解析ERP系统的业务智能与报表分析模块
667 3
|
网络安全 开发工具 数据安全/隐私保护
ipa 如何安装到 iphone
ipa 如何安装到 iphone