【问题标题】:Can spark utilize a persisted rdd across jobs?spark可以在工作中使用持久的rdd吗?
【发布时间】:2016-12-02 04:06:17
【问题描述】:

当我运行我的 spark 应用程序时。产生了几个工作。每个 Job 都有几个阶段。

我正在尝试持久化 RDD。我将 RDD 持久化到磁盘。但是我无法判断它是否在整个工作中被重复使用。

当我查看 DAG 时,我确实看到了一个 green dot,表示一个 rdd 是持久的。但我也在 dag 中看到了之前的地图/过滤器等。

例如在 Job-0 Dag 中我看到:

RandomRDD [0] -> MapParitionRDD [1] -> MapParitionRDD [2] (green) -> Filter [3]...

然后对于 Job-1 Dag,我也看到了:

RandomRDD [0] -> MapParitionRDD [1] -> MapParitionRDD [2] (green) -> Filter [3]...

如何判断 rdd[0]、rdd[1] 和 rdd[2] 是否被重新计算或只是脱水?

一般而言,通过查看工作经历,您如何判断 rdd 是否被重新计算或只是脱水?

【问题讨论】:

  • 在工作节点的日志文件中搜索类似:。 Spark 中的 CacheManager 负责将 RDD 分区内容传递给 Block Manager,并确保节点不会同时加载 RDD 的两个副本。如果你看到这样的东西: 那么这意味着RDD大于空闲内存它会自动分页到磁盘并在需要时重新计算jaceklaskowski.gitbooks.io/mastering-apache-spark/content/…

标签: java apache-spark


【解决方案1】:

生成持久化 RDD 的上游(例如 0 和 1)所需的计算,而持久化一 (2) 将不会进行。为了测试它,在持久化它之前和持久化它之后对 RDD2 做一些简单的计算,并注意时间上的差异。

Spark Persistence Documentation

Spark 中最重要的功能之一是跨操作将数据集持久化(或缓存)在内存中。当你持久化一个 RDD 时,每个节点都会将它计算的任何分区存储在内存中,并在对该数据集(或从它派生的数据集)的其他操作中重用它们。这使得未来的行动更快(通常超过 10 倍)。缓存是迭代算法和快速交互使用的关键工具。

【讨论】:

  • 但这适用于不同的工作吗?还是只是在同一份工作中进行计算?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-24
  • 1970-01-01
  • 2016-07-17
  • 1970-01-01
  • 1970-01-01
  • 2016-01-16
  • 1970-01-01
相关资源
最近更新 更多