深入 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

相关文章
|
IDE 编译器 Linux
linux 编译 c或cpp 文件为动态库 so 文件(最简单直观的模板)
linux 编译 c或cpp 文件为动态库 so 文件(最简单直观的模板)
|
存储 人工智能 算法
聚类的k值确定之轮廓系数
聚类的k值确定之轮廓系数
2904 0
|
算法 数据库 计算机视觉
Dataset之COCO数据集:COCO数据集的简介、下载、使用方法之详细攻略
Dataset之COCO数据集:COCO数据集的简介、下载、使用方法之详细攻略
|
移动开发 JavaScript 前端开发
HTML5 表单属性详解
HTML5引入了多种新的表单属性,使表单创建与验证更加便捷高效。新增的输入类型包括`email`、`url`、`tel`等,常用属性有`placeholder`、`required`等。表单元素如`<form>`可设置提交方法和目标URL,`<button>`及`<input type="submit">`用于提交。新元素`<datalist>`和`<output>`提供更多功能。HTML5还提供了内置表单验证机制,增强用户体验。
|
XML 分布式计算 资源调度
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
448 5
|
数据安全/隐私保护 Python
Python 中删除文件夹下文件的方法详解
本文探讨了Python删除文件夹中特定文件的三种方法。使用os模块简单直接,适合基础操作,但不支持递归删除;shutil库能递归删除整个文件夹,需谨慎使用;glob模块则按文件名模式匹配并删除,灵活性高但范围受限。根据需求和安全性考虑选择合适的方法。
|
存储 分布式计算 Apache
Windows环境下安装和配置Zookeeper环境及常见错误解决方案
ZooKeeper 是 Apache 软件基金会的一个软件项目,它为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。ZooKeeper 的架构通过冗余服务实现高可用性。 本文主要讲解: 1. 如何在Windows环境下搭建和配置Zookeeper 2. Zookeeper配置文件配置与解析 3. 常见错误及解决方案
5656 1
Windows环境下安装和配置Zookeeper环境及常见错误解决方案
|
机器学习/深度学习 人工智能 算法
基于BP神经网络的手写数字识别(Matlab代码实现)
基于BP神经网络的手写数字识别(Matlab代码实现)
634 0
|
机器学习/深度学习 存储 分布式计算
KDD 2022 | 快手提出基于因果消偏的观看时长预估模型D2Q,解决短视频推荐视频时长bias难题
KDD 2022 | 快手提出基于因果消偏的观看时长预估模型D2Q,解决短视频推荐视频时长bias难题
994 0
|
前端开发 Java Windows
JDK1.8下载、安装和环境配置教程(详细)
JDK1.8下载、安装和环境配置教程(详细)
30509 1
JDK1.8下载、安装和环境配置教程(详细)