spark数据集市RDD,这里有个很重要的特性是RDD可以选择存储起来让另外的action操作,下面是各种缓存级别
存储方式:RDD的持久化或缓存选项是通过persist()或cache()
备注:1.RDD中的数据具有容错性; 2.Shuffle操作是不需要指定cache()或者persist()的,会自动缓存rdd结果,避免因为节点故障等问题重新计算
RDD具有容错性,rdd只支持粗粒度转换(单个块上执行的单个操作,如是从哪个rdd-map过来的),如果出了问题,也不用全部重新执行,只需要读取之前是从哪个rdd转换过来的,怎么转换的,即可以将数据重新生成----------所以这种方式也成为“血统(Lineage)”容错
RDD的这种容错分为窄依赖和宽依赖,窄依赖效率高,主要是针对父rdd只有一个的情况(Transformation)
宽依赖父RDD来自很多个片,需要重新计算
我的理解是涉及到shuffle操作的大部分都宽依赖,Transformation操作都是窄依赖
每一次action调用,Spark都会从最初的输入RDD开始,重新执行一遍所有的tranformation, 对于批处理任务,这样做固然没有问题,但是对于反复操作操作同一数据的交互式(interactive)任务, 重复执行相同的计算显得很低效。
Spark提供缓存API来解决这一问题,用户可以通过cache()或persist()方法,将中间计算结果缓存到内存或者硬盘,下次执行相同计算时,可直接读取缓存来提高效率。persist()和cache()的区别在于,persist()提供了更多的参数,来支持不同级别的缓存机制。
MEMORY_ONLY 默认选项,RDD的(分区)数据直接以Java对象的形式存储于JVM的内存中,如果内存空间不足,某些分区的数据将不会被缓存,需要在使用的时候根据世代信息重新计算。
MYMORY_AND_DISK RDD的数据直接以Java对象的形式存储于JVM的内存中,如果内存空间不中,某些分区的数据会被存储至磁盘,使用的时候从磁盘读取。
MEMORY_ONLY_SER RDD的数据(Java对象)序列化之后存储于JVM的内存中(一个分区的数据为内存中的一个字节数组),相比于MEMORY_ONLY能够有效节约内存空间(特别是使用一个快速序列化工具的情况下),但读取数据时需要更多的CPU开销;如果内存空间不足,处理方式与MEMORY_ONLY相同。
MEMORY_AND_DISK_SER 相比于MEMORY_ONLY_SER,在内存空间不足的情况下,将序列化之后的数据存储于磁盘。
DISK_ONLY 仅仅使用磁盘存储RDD的数据(未经序列化)。
"MEMORY_ONLY_2,
MEMORY_AND_DISK_2, etc." 以MEMORY_ONLY_2为例,MEMORY_ONLY_2相比于MEMORY_ONLY存储数据的方式是相同的,不同的是会将数据备份到集群中两个不同的节点,其余情况类似。
OFF_HEAP(experimental) RDD的数据序例化之后存储至Tachyon。相比于MEMORY_ONLY_SER,OFF_HEAP能够减少垃圾回收开销、使得Spark Executor更“小”更“轻”的同时可以共享内存;而且数据存储于Tachyon中,Spark集群节点故障并不会造成数据丢失,因此这种方式在“大”内存或多并发应用的场景下是很有吸引力的。需要注意的是,Tachyon并不直接包含于Spark的体系之内,需要选择合适的版本进行部署;它的数据是以“块”为单位进行管理的,这些块可以根据一定的算法被丢弃,且不会被重建。
分享到:
相关推荐
本篇文章主要探讨Spark中的RDD缓存和checkpoint机制。 首先,RDD缓存是Spark提升性能的关键特性。通过调用`persist()`或`cache()`方法,我们可以将一个RDD的计算结果存储在内存中,以便后续的操作可以快速访问,...
Spark调优篇04Spark之JVM调优1 本文档主要讲解了 Spark 之 JVM 调优的相关知识点,涉及到 JVM 调优的重要性、缓存操作的内存占比、统一内存管理机制、Executor 堆外内存的调节、连接等待时长的设置等内容。 JVM ...
Spark内核篇01主要探讨的是Spark的通信架构和集群启动流程,这对于理解Spark如何高效地处理大数据至关重要。首先,我们需要了解Spark的核心组件——Driver和Executor。 Driver是Spark作业的控制中心,它执行用户...
Spark将堆内内存划分为三个部分:存储内存(用于缓存RDD和广播变量)、执行内存(用于Shuffle等计算操作)和其他未特别规划的内存(用于Spark内部对象和用户自定义对象)。这两部分内存的大小可以通过`spark.storage...
本文主要探讨Spark性能优化的基础篇,包括开发调优和资源调优,旨在帮助开发者创建出更高效的Spark作业。 首先,开发调优是性能优化的关键步骤。在开发Spark作业时,遵循一些基本的开发原则可以显著提高性能: 1. ...
本篇文章将深入探讨如何将Spring Boot与Spark进行整合,以及通过Spark API实现数据处理。 首先,我们来理解一下Spring Boot。它是Spring框架的一个简化版本,旨在简化Java应用程序的初始设置和配置。通过内置的...
本篇笔记将深入探讨Spark的核心概念、架构设计以及实际应用,旨在帮助读者全面理解并掌握Spark。 1. Spark概述: Spark最初由加州大学伯克利分校AMPLab开发,其设计理念是提供一个快速、通用且可扩展的大数据处理...
《Spark之常规性能调优详解》 Spark作为一个强大的大数据处理框架,其性能调优是确保高效运行的关键。本文主要探讨Spark的常规性能调优策略,包括资源分配优化和RDD优化,旨在帮助用户最大化利用资源,提升任务执行...
一、Spark基础篇 Spark的基础部分主要涉及以下几个关键概念: 1. **RDD(Resilient Distributed Datasets)**:Spark的核心数据结构,是弹性分布式数据集,提供了容错机制,可以在多台机器上并行操作。 2. **...
缓存和检查点是提高Spark性能的重要策略。如果一个RDD在程序中被多次使用,可以将其缓存,首次计算后,后续使用会直接从缓存读取,避免重复计算。然而,长时间的迭代应用可能导致血缘关系链过长,这时可以使用检查点...
### Spark性能优化指南—高级篇 #### 数据倾斜调优 数据倾斜是Spark处理大数据时最常见的问题之一,它严重影响了任务的执行效率。本章节重点探讨数据倾斜现象的原因、识别方式及解决方案。 ##### 调优概述 数据...
- 这部分内容在基础篇中没有详细展开,但它是提高Spark作业性能的一个关键方面。 6. **Shuffle调优**: - Shuffle是Spark中用于数据交换的一个重要过程,它负责在不同的执行阶段间转移数据。 - Shuffle过程中的...
本篇将详细介绍如何在 Spark 环境下实现 WordCount,并对相关配置文件进行解析。 #### 二、Spark WordCount 实现步骤 ##### 1. 配置 HDFS 权限 为了确保文件系统操作顺利进行,首先需要调整 HDFS 的权限设置。...
本篇文章主要探讨Spark面对OOM问题的解决方法及优化策略。 首先,我们需要了解Spark的内存模型。Spark的Executor内存分为三个部分:Execution内存、Storage内存和其他内存。Execution内存主要用于执行任务,如join...
本篇将深入解析光环大数据培训的Spark体系课程,帮助读者掌握这一强大的分布式计算工具。 一、Spark概述 Spark是由Apache基金会维护的开源大数据处理框架,其核心设计目标是提供快速、通用和可扩展的数据处理能力。...
本篇文章将深入探讨Spark 2.1.0中的Java API及其关键知识点。 1. **SparkContext**: Spark的核心组件,它是所有Spark操作的入口点。通过`SparkConf`配置信息创建`SparkContext`,它可以连接到集群并启动应用。例如...
本篇文章将深入探讨Spark与Python结合的关键知识点。 一、Spark核心概念 1. Resilient Distributed Datasets (RDDs):Spark的基础数据结构,是不可变、分区的元素集合。它们在集群中以分布式方式存储,并支持并行...
本篇文章将以"Spark_competition"数据集为例,深入探讨如何利用Spark进行大数据分析,以及涉及到的相关知识点。 一、Spark核心概念与架构 Spark的核心在于它的弹性分布式数据集(Resilient Distributed Datasets,...
本篇文章将详细介绍Spark的设计理念、核心组件、执行流程及其关键特性。 #### 二、系统部署与架构 ##### 2.1 部署架构概述 Apache Spark的核心部署架构包括Master节点和Worker节点。Master节点负责集群资源的分配...
本篇文章将深入探讨Spark Driver的工作机制,以及如何生成Jobs并启动Tasks。 首先,我们来理解Spark作业(Job)与任务(Task)的概念。一个Spark作业是由一个或多个RDD操作(如map、filter、reduceByKey等)组成的...