我知道Apache 持久化方法会将RDD保存在内存中,如果内存空间不足,则将剩余的RDD分区存储在文件系统(磁盘)中。我似乎无法理解的是以下几点:
假设我们有一个集群,我们想要持久化一个RDD。假设节点A没有很大的内存空间,而节点B有。现在假设在运行持久化命令之后,节点A将耗尽内存。现在的问题是:
Apache是否在节点B中寻找更多的内存空间,并尝试将所有内容存储在内存中?
或者考虑到节点A中没有足够的空间,即使节点B中有可用的内存空间,Spark也会将剩余的RDD分区存储在节点A的磁盘中?
谢谢你的回答。
发布于 2018-09-20 11:48:34
通常,星火并不会搜索免费空间。数据在负责特定分区的执行器上本地缓存。
唯一的例外是使用复制持久性模式时--在这种情况下,将在另一个节点上放置其他副本。
发布于 2018-09-20 11:52:49
我能找到的最接近的东西就是这个缓存或不缓存。在很多情况下,数据是轻微倾斜的,在试图将数据缓存/持久化到RAM时,会得到与内存相关的异常/故障,其中一种方法是使用像MEMORY_AND_DISK,这样的StorageLevels,但很明显,缓存和读取这些分区要花费更长的时间。
另外,在Spark中,您可以找到有关执行器的信息,以及它们用于缓存的内存的多少,您可以尝试和监视它的行为。
https://stackoverflow.com/questions/52424157
复制相似问题