深入 RDD 问题-分解和容错 | 学习笔记

简介: 快速学习 深入 RDD 问题-分解和容错

开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段深入 RDD 问题-分解和容错】学习笔记,与课程紧密联系,让用户快速学习知识。

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


深入 RDD 问题-分解和容错


内容介绍:

一、如何将计算任务分解在集群中

二、如何进行移动数据步入移动计算的优化

三、如何进行移动数据步入移动计算的优化

四、如果任务特别复杂,流程很长,许多rdd之间有依赖关系,如何进行优化?

 

一、如何将计算任务分解在集群中

首先分解要分为两个端,第一个端是计算端,计算端要能够分解,第二端叫储存端,也要能够分解。存储侧比较常见的能分解的 HDFS,一个文件可以在不同的 HDFS 上来处理。计算侧如何配合存储侧来进行处理?可以将 rdd 变成可分区,每一个分区可以对应不同的 rdd block 分区,第二个 rdd 需要延续一个 rdd,进行分期和计算。

image.png

有时存储侧不能分区,那在计算侧单独分区分析也可。通过上述操作可能会认为:Rdd 不能单独存放数据。但其实是可以的,rdd 虽然是一个数据结构,但是不存数据也是数据结构,不存放数据,只进行数据流通,也可以是数据结构。

Rdd 不一定是存储 rdd 当中整个的文件,这些文件可能是 rdd 的一个分区,代表 hdfs 的一个分区。Rdd 既然是一个计算引擎计算框架,就可以针对  hdfs 分区来分 rdd 的分区,就是一个天然可分区的结构。如何进行分解?如果是hdfs,那么一个分区对应一个 hdfs 的分区,所以 rdd 至少是可以分片的。

 

二、如何进行移动数据步入移动计算的优化

如果在 note01上存储了一个 hdfs,需要让处理 block rdd 分区也调度到 note01上处理,尽量让存储的单元靠近计算的单元,甚至直接调度到同一台机器上。

如果无法调度到同一台机器上,尽量调度到一个机架上。同一个机架的数据之间,来进行数据拷贝的速度比较快。如果无法调度到同一个机架上,也要调度到同一个机房里面。

image.png


三、在集群中运行,需要多个节点之间配合,出错概率也较,出错后应如何处理?

举个例子,假如有1000台机器,每台机器出错率为99%,可用性为99%,那么整个集群的可用性为30%左右,如果这样的话,就不能保证每台机器都可用。出错了之后,如何处理?因此在大数据之中,容错一定要考虑的。考虑调度容错,消息丢失的容错等。假如出错的概率变高,如何容错?

常见的容错手段:直接记录数据本身,比如有一个 hdfs 的文件,处理的时候,rdd 将整个文件存在集群之中,出错的时候在进行恢复,直接备份一整份数据。下图中,如果是 rdd2出错的话,那么进行重新计算出来也可。即追述。

总结即为两种方法:一是整个备份下来,二是进行追述。

第二种是记录依赖关系,记录 rdd2rdd1是有依赖关系的,而 rdd2是由 rdd1计算得来的。

2出问题,再拿1重新计算一遍,得到一个新的2,就可以解决问题。但有一个前提是要清楚 rdd2是由谁计算得来的,记录依赖关系。第二是整体大致函数关系,假如说 rdd2是通过 rdd1.map//)得到的。

所以 rdd3调用的 rdd2调用的一个 filter 得到。假如说 rdd3失败了,即通过 rdd2进行 filter,就得到 rdd3,如果rdd2页丢失了,就通过 rdd1再进行 map,就得到 rdd1。这样就清楚了这三者的依赖关系。

RDD1→RDD2→RDD3这个过程中,RDD2出错了,有两种办法可以解决

1.缓存 RDD2的数据,直接恢复 RDD2,类似 HDFS 的备份机制

2.记录 RDD2的依赖关系,通过其父级的 RDD 来恢复 RDD2,这种方式会少很多数据的交互和保如何通过父级 RDD 来恢复?

1.记录 RDD2的父亲是 RDD1

2.记录 RDD2的计算函数,例如记录 RDD2=RDD1.map(.)map(..)就是计算函数

3当 RDD2计算出错的时候 可以通过父级 RDD 和计算函数来协复 RDD2


四、如果任务特别复杂,流程很长,许多 rdd 之间有依赖关系,如何进行优化?

image.png

下图中有15个流程,那么如果再记录依赖关系,过程会变得很复杂,因此采用把整个数据保存下来进行容错。

上面提到了可以使用依赖关系来进行容错,但是如果依赖关系特别长的时候,这种方式其实也比较低效,这个时候就应该使用另外一种方式,也就是记录数据集的状态

Spark 中有两个手段可以做到

1.缓存

2. Checkpoint

相关文章
|
1月前
|
机器学习/深度学习 存储 缓存
ATB概念之:算子tiling
算子 tiling 是一种优化技术,用于提高大规模张量运算的计算效率。它通过将大任务分解为小块,优化内存使用、支持并行计算,并防止内存溢出。在ATB中,tiling data指kernel的分片参数,用于指导计算。ATB提供了三种 tiling data 搬移策略:整体搬移、多stream搬移及随kernel下发搬移,旨在优化内存拷贝任务,提高计算效率。
|
3月前
|
存储 缓存 分布式计算
大数据-89 Spark 集群 RDD 编程-高阶 编写代码、RDD依赖关系、RDD持久化/缓存
大数据-89 Spark 集群 RDD 编程-高阶 编写代码、RDD依赖关系、RDD持久化/缓存
53 4
|
3月前
|
SQL 分布式计算 大数据
大数据-91 Spark 集群 RDD 编程-高阶 RDD广播变量 RDD累加器 Spark程序优化
大数据-91 Spark 集群 RDD 编程-高阶 RDD广播变量 RDD累加器 Spark程序优化
56 0
|
3月前
|
分布式计算 算法 大数据
大数据-90 Spark 集群 RDD 编程-高阶 RDD容错机制、RDD的分区、自定义分区器(Scala编写)、RDD创建方式(二)
大数据-90 Spark 集群 RDD 编程-高阶 RDD容错机制、RDD的分区、自定义分区器(Scala编写)、RDD创建方式(二)
68 0
|
3月前
|
缓存 分布式计算 大数据
大数据-90 Spark 集群 RDD 编程-高阶 RDD容错机制、RDD的分区、自定义分区器(Scala编写)、RDD创建方式(一)
大数据-90 Spark 集群 RDD 编程-高阶 RDD容错机制、RDD的分区、自定义分区器(Scala编写)、RDD创建方式(一)
71 0
|
5月前
|
存储 分布式计算 数据处理
解释弹性分布式数据集(RDD)的概念
【8月更文挑战第13天】
273 4
|
8月前
|
存储 运维 流计算
流计算中的容错机制是什么?请解释其作用和常用方法。
流计算中的容错机制是什么?请解释其作用和常用方法。
96 0
|
存储 分布式计算 大数据
Spark 原理_逻辑图_RDD 之间的关系_一对一 | 学习笔记
快速学习 Spark 原理_逻辑图_RDD 之间的关系_一对一
133 0
Spark 原理_逻辑图_RDD 之间的关系_一对一 | 学习笔记
|
分布式计算 Hadoop 大数据
Spark 原理_逻辑图_RDD 之间的多对一 | 学习笔记
快速学习 Spark 原理_逻辑图_RDD 之间的多对一
109 0
Spark 原理_逻辑图_RDD 之间的多对一 | 学习笔记

热门文章

最新文章