Spark 的容错机制:保障数据处理的稳定性与高效性

Spark 的介绍与搭建:从理论到实践_spark环境搭建-CSDN博客

Spark 的Standalone集群环境安装与测试-CSDN博客

PySpark 本地开发环境搭建与实践-CSDN博客

Spark 程序开发与提交:本地与集群模式全解析-CSDN博客

Spark on YARN:Spark集群模式之Yarn模式的原理、搭建与实践-CSDN博客

Spark 中 RDD 的诞生:原理、操作与分区规则-CSDN博客

Spark 中的 RDD 分区的设定规则与高阶函数、Lambda 表达式详解-CSDN博客

RDD 算子全面解析:从基础到进阶与面试要点-CSDN博客

PySpark 数据处理实战:从基础操作到案例分析-CSDN博客

目录

一、Spark 容错机制概述

1、各个软件为了防止数据丢失的解决方案

2、Spark如何保障数据的安全

二、RDD 持久化机制

(一)cache 算子

(二)persist 算子

(三)unpersist 算子

(四)示例代码分析

三、RDD 检查点机制

(一)功能与原理

(二)适用场景

四、RDD 的 cache、persist 持久化机制和 checkpoint 检查点机制的区别

五、将日志分析案例进行优化

六、总结


        在大数据处理领域,Spark 作为一款强大的分布式计算框架,面临着数据丢失和性能优化的双重挑战。为了确保数据的安全性和处理效率,Spark 构建了一套完善的容错机制。本文将深入探讨 Spark 的容错机制,包括 RDD 的持久化机制(persist 和 cache 算子)以及检查点机制(checkpoint),并分析它们的特点、适用场景以及相互之间的区别。

一、Spark 容错机制概述

1、各个软件为了防止数据丢失的解决方案

操作日志:

将内存变化操作日志追加记录在一个文件中,下一次读取文件对内存重新操作
  - NAMENODE:元数据的操作日志记录在edits
  - MySQL:日志记录binlog ()


 副本机制:

将数据构建多份冗余副本
  - HDFS:构建每个数据块的3个副本


依赖关系:

每份数据保留与其他数据之间的一个转换关系
  - RDD:保留RDD与其他RDD之间的依赖关系

2、Spark如何保障数据的安全

        每个RDD在构建数据时,会根据自己来源一步步导到数据来源,然后再一步步开始构建RDD数据。

问题:如果一个RDD被触发多次,这个RDD就会按照依赖关系被构建多次,性能相对较差,怎么解决?

例如:日志分析的时候,三个问题,tupleRdd 之前的所有操作都要执行三次,每次读取100M多的数据,效率非常的低

  • 第一次:一定会通过血脉构建这个RDD的数据
  • 希望从第二次开始,就不要重复构建,直接使用第一个构建的内容
  • 实现:Spark持久化机制:主动将RDD进行保存,供多次使用,避免重复构建

二、RDD 持久化机制

(一)cache 算子

  • 功能:将 RDD 缓存在内存中,以便后续多次使用时无需重新计算。
  • 语法cache()
  • 本质:底层实际调用的是 persist(StorageLevel.MEMORY_ONLY),即只尝试将 RDD 缓存在内存。但如果内存资源不足,缓存操作可能会失败。
  • 场景:适用于资源充足且确定 RDD 只需在内存中缓存的情况,例如对于一些频繁使用且数据量较小能够完全容纳在内存中的 RDD,可以使用 cache 算子提高数据读取速度。

(二)persist 算子

  • 功能:能够将 RDD(包含其依赖关系)进行缓存,并且可以根据需求自行指定缓存的级别,这是它与 cache 算子的主要区别。
  • 语法persist(StorageLevel)
  • 级别
    • 将 RDD 缓存在磁盘中
      • StorageLevel.DISK_ONLY = StorageLevel(True, False, False, False):将庞大且暂时不急需使用的 RDD 放入磁盘,释放 Executor 内存。
      • StorageLevel.DISK_ONLY_2 = StorageLevel(True, False, False, False, 2):在磁盘中多存储一个缓存副本,提高数据的冗余性和可用性。
      • StorageLevel.DISK_ONLY_3 = StorageLevel(True, False, False, False, 3):类似地,存储三个副本。
        StorageLevel.DISK_ONLY = StorageLevel(True, False, False, False)
        StorageLevel.DISK_ONLY_2 = StorageLevel(True, False, False, False, 2)
        StorageLevel.DISK_ONLY_3 = StorageLevel(True, False, False, False, 3)

    • 将 RDD 缓存在内存中
      • StorageLevel.MEMORY_ONLY = StorageLevel(False, True, False, False):仅使用内存进行缓存,常用于高频使用且数据量不大能适应内存容量的 RDD。
      • StorageLevel.MEMORY_ONLY_2 = StorageLevel(False, True, False, False, 2):增加一个内存缓存副本。
        StorageLevel.MEMORY_ONLY = StorageLevel(False, True, False, False)
        StorageLevel.MEMORY_ONLY_2 = StorageLevel(False, True, False, False, 2)

    • 将 RDD 优先缓存在内存中,如果内存不足,就缓存在磁盘中
      • StorageLevel.MEMORY_AND_DISK = StorageLevel(True, True, False, False):对于高频使用的大 RDD 较为合适,先利用内存缓存,当内存空间不足时,自动将多余数据溢出到磁盘。
      • StorageLevel.MEMORY_AND_DISK_2 = StorageLevel(True, True, False, False, 2):多一个缓存副本。
        StorageLevel.MEMORY_AND_DISK = StorageLevel(True, True, False, False)
        Sto
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

天冬忘忧

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

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

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

打赏作者

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

抵扣说明:

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

余额充值