gpt4 book ai didi

apache-spark - Spark RDD 是否缓存在工作节点或驱动节点(或两者)上?

转载 作者:行者123 更新时间:2023-12-03 07:25:43 25 4
gpt4 key购买 nike

任何人都可以纠正我对 Spark 持久化的理解吗?

如果我们对 RDD 执行了cache(),那么它的值只会缓存在那些最初实际计算 RDD 的节点上。意思是,如果有一个100个节点的集群,并且RDD是在第一个和第二个节点的分区中计算的。如果我们缓存这个 RDD,那么 Spark 将仅在第一个或第二个工作节点中缓存它的值。因此,当此 Spark 应用程序在稍后阶段尝试使用此 RDD 时,Spark 驱动程序必须从第一个/第二个节点获取值。

我说得对吗?

(或)

RDD 值是否保存在驱动程序内存中而不是保存在节点上?

最佳答案

更改此:

then Spark is going to cache its value only in first or second worker nodes.

对此:

then Spark is going to cache its value only in first and second worker nodes.

并且...是的正确!

Spark 尝试最大限度地减少内存使用(我们喜欢这一点!),因此它不会产生任何不必要的内存负载,因为它惰性评估每个语句,即它不会对任何转换执行任何实际工作,它将等待操作发生,这使得Spark别无选择,只能执行实际工作(读取文件、进行通信)例如,将数据发送到网络,进行计算,将结果收集回驱动程序......)。

你看,我们不想缓存所有内容,除非我们真的可以(即内存容量允许)(是的,我们可以在执行器或/和驱动程序中要求更多内存,但有时我们的集群只是没有资源,这在我们处理大数据时非常常见),这确实很有意义,即缓存的 RDD 将被一次又一次地使用(因此缓存它会加速我们工作的执行)。

这就是为什么当你不再需要 RDD 时你想要unpersist()它......! :)

检查此图像,来 self 的一份工作,其中我请求 100 个执行程序,但是“执行程序”选项卡显示 101,即 100 个从属/工作人员和一个主程序/驱动程序:

enter image description here

关于apache-spark - Spark RDD 是否缓存在工作节点或驱动节点(或两者)上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39196748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com