Spark cache vs broadcast

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark cache vs broadcast相关的知识,希望对你有一定的参考价值。

看起来广播方法在我的集群中生成RDD的分布式副本。另一方面,cache()方法的执行只是将数据加载到内存中。

但我不明白缓存的RDD如何在集群中分布。

你能告诉我在什么情况下我应该使用rdd.cache()rdd.broadcast()方法吗?

答案

你能告诉我在什么情况下我应该使用rdd.cache()和rdd.broadcast()方法吗?

RDD分为多个分区。这些分区本身充当整个RDD的不可变子集。当Spark执行图的每个阶段时,每个分区都会被发送给一个对数据子集进行操作的worker。反过来,如果需要重新迭代RDD,每个工作者都可以缓存数据。

广播变量用于向每个工作者发送一次不可变状态。当您需要变量的本地副本时,可以使用它们。

这两个操作彼此完全不同,每个操作代表不同问题的解决方案。

另一答案

cache()或persist()允许跨操作使用数据集。

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

每个持久化的RDD都可以使用不同的存储级别进行存储,例如,允许您将数据集保留在磁盘上,将其保留在内存中,但作为序列化的Java对象(以节省空间),跨节点复制或将其存储在 - 堆

Broadcast variables允许程序员在每台机器上保留一个只读变量,而不是随副本一起发送它的副本。例如,它们可用于以有效的方式为每个节点提供大输入数据集的副本。 Spark还尝试使用有效的广播算法来分发广播变量,以降低通信成本。

您可以在此documentation页面找到更多详细信息。

有用的帖子:

Advantage of Broadcast Variables

What is the difference between cache and persist?

另一答案

你能告诉我在什么情况下我应该使用rdd.cache()和rdd.broadcast()方法吗?

让我们举一个例子 - 假设您有一个employee_salary数据,其中包含每个员工的部门和薪水。现在说,任务是找到每个员工的平均部门薪水的比例。 (如果员工e1他的部门是d1,我们需要找到e1.salary / average(d1中的所有工资))。

现在,一种方法是 - 你首先将数据读入rdd - 比如说rdd1。然后一个接一个地做两件事 -

首先,使用rdd1 *计算部门明智的工资平均值。您最终会在驱动程序上获得部门平均工资结果 - 基本上是包含deptId与平均值的地图对象。

其次,您需要使用此结果将每个员工的工资除以各自部门的平均工资。请记住,每个工人都可以有来自任何部门的员工,因此您需要访问每个员工的部门明智的平均工资结果。这该怎么做?那么,您可以将您在驱动程序上获得的平均薪资图发送给广播中的每个工作人员,然后可以将其用于计算rdd1中每个“行”的工资分数。

如何缓存RDD?请记住,从最初的rdd1开始,有两个计算分支 - 一个用于计算dept wise average,另一个用于计算rdd中每个雇员的平均值。现在,如果你没有缓存rdd1,那么对于上面的第二个任务,你可能需要再次返回磁盘来读取并重新计算它,因为当你到达这一点时火花可能已经从内存驱逐了这个rdd。但是既然我们知道我们将使用相同的rdd,我们可以要求Spark第一次将它保存在内存中。然后下次我们需要在它上面应用一些转换时,我们已经将它存储在内存中。

*我们可以使用基于dept的分区,因此您可以避免广播,但为了说明的目的,让我们说不。

另一答案

用例

如果要多次使用它,可以缓存或广播对象。

您只能缓存RDD或RDD衍生物,而您可以广播任何类型的对象,包括RDD。

我们在处理RDD / DataFrame / DataSet时使用cache(),我们希望多次使用数据集,而不是每次都重新计算它。

我们广播一个对象

  1. 我们正在处理相对较小的RDD / DataFrame / DataSet,并且广播它提供了优于缓存的性能优势(例如,如果我们在连接中使用数据集)
  2. 我们正在处理一个普通的旧Scala / Java对象,它将用于作业的多个阶段。

以上是关于Spark cache vs broadcast的主要内容,如果未能解决你的问题,请参考以下文章

[Spark內核] 第42课:Spark Broadcast内幕解密:Broadcast运行机制彻底解密Broadcast源码解析Broadcast最佳实践

Spark广播变量broadcast案例

spark中的广播变量broadcast

Spark调优内存模型与参数调优

spark小案例——RDD,broadcast

一.spark内存模型和执行计划过程