Spark-rdd的持久化

简介: Spark 最重要的一个功能是它可以通 过 各种操作( operations )持久化(或者 缓 存)一个集合到内存中。当你持久化一个 RDD 的 时 候,每一个 节 点都将参与 计 算的所有分区数据存 储 到内存中,并且 这 些 数据可以被 这 个集合(以及 这 个集合衍生的其他集合)的 动 作( action )重复利用。

Spark 最重要的一个功能是它可以通 过 各种操作( operations )持久化(或者 缓 存)一个集合到内存中。当你持久化一个 RDD 的 时 候,每一个 节 点都将参与 计 算的所有分区数据存 储 到内存中,并且 这 些 数据可以被 这 个集合(以及 这 个集合衍生的其他集合)的 动 作( action )重复利用。 这 个能力使后 续 的 动 作速度更快(通常快 10 倍以上)。 对应 迭代算法和快速的交互使用来 说 , 缓 存是一个关 键 的工具。你能通 过 persist() 或者 cache() 方法持久化一个 rdd 。首先,在 action 中 计 算得到 rdd ;然后,将其保存在每个 节 点的内存中。Spark的 缓 存是一个容 错 的技 术 -如果RDD的任何一个分区 丢 失,它 可以通 过 原有的 转换 ( transformations )操作自 动 的重复 计 算并且 创 建出 这 个分区。此外,我 们 可以利用不同的存 储级别 存 储 每一个被持久化的RDD。例如,它允 许 我 们 持久化
集合到磁盘上、将集合作为序列化的 Java 对象持久化到内存中、在节点间复制集合或者存储集合到 Tachyon中。我 们 可以通 过传递 一个 StorageLevel 对 象 给 persist() 方法 设 置 这 些存储级别 。 cache() 方法使用了默 认 的存 储级别— StorageLevel.MEMORY_ONLY 。
完整的存 储级别介绍如下所示:
这里写图片描述
Spark也会自动持久化一些shuffle操作(如 reduceByKey )中的中间数据,即使用户没有调用 persist 方法。 这样 的好 处 是避免了在shuffle出 错 情况下,需要重复 计 算整个 输 入。如果用户计划重用 计算过程中产生的RDD,推荐调用 persist 方法。

如何 选择 存 储级别

Spark的多个存储级别意味着在内存利用率和cpu利用效率间的不同权衡。通过下面的过程选择一个合适的存储级别:如果你的RDD适合默认的存储级别(MEMORY_ONLY),就选择默认的存储级别。因为这 是cpu利用率最高的 选项 ,会使RDD上的操作尽可能的快。如果不适合用默 认 的 级别 , 选MEMORY_ONLY_SER。 选择 一个更快的序列化 库 提高对象的空间使用率,但是仍能够相当快的访问。
除非函数 计 算 RDD 的花 费较 大或者它 们 需要 过滤 大量的数据,不要将 RDD 存 储 到磁 盘上,否 则 ,重复 计 算一个分区就会和重磁 盘 上 读 取数据一 样 慢。如果你希望更快的 错误 恢复,可以利用重复 (replicated) 存 储级别 。所有的存 储级别 都可
以通 过 重复 计 算 丢 失的数据来支持完整的容 错 ,但是重复的数据能 够 使你在 RDD 上 继续运 行任 务 ,而不需要重复 计 算 丢 失的数据。在 拥 有大量内存的 环 境中或者多 应 用程序的 环 境中, OFF_HEAP 具有如下 优势 :它 运 行多个 执 行者共享 Tachyon 中相同的内存池它 显 著地 减 少 垃圾 回收的花 费如果 单 个的 执 行者崩 溃 , 缓 存的数据不会 丢 失。

删 除数据

Spark 自 动 的 监 控每个 节 点 缓 存的使用情况,利用最近最少使用原 则删 除老旧的数据。如果想手动的删除RDD,可以使用 RDD.unpersist() 方法

目录
相关文章
|
3月前
|
存储 缓存 分布式计算
Spark RDD持久化与缓存:提高性能的关键
Spark RDD持久化与缓存:提高性能的关键
|
9月前
|
存储 缓存 分布式计算
Spark 的持久化 & Checkpoint
Spark 的持久化 & Checkpoint
120 0
|
7月前
|
存储 缓存 分布式计算
大数据Spark RDD持久化和Checkpoint
大数据Spark RDD持久化和Checkpoint
41 0
|
8月前
|
存储 缓存 分布式计算
Spark学习--3、WordCount案例、RDD序列化、RDD依赖关系、RDD持久化(二)
Spark学习--3、WordCount案例、RDD序列化、RDD依赖关系、RDD持久化(二)
|
8月前
|
存储 缓存 分布式计算
Spark学习--3、WordCount案例、RDD序列化、RDD依赖关系、RDD持久化(一)
Spark学习--3、WordCount案例、RDD序列化、RDD依赖关系、RDD持久化(一)
|
10月前
|
存储 缓存 分布式计算
Spark RDD持久化的三种方式
Spark RDD持久化的三种方式
137 0
|
存储 缓存 分布式计算
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(下)
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(下)
105 0
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(下)
|
缓存 分布式计算 大数据
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(中)
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(中)
140 0
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(中)
|
缓存 分布式计算 Scala
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(上)
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(上)
188 0
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(上)