【问题标题】:Apache Spark - Memory managementApache Spark - 内存管理
【发布时间】:2015-07-10 00:40:27
【问题描述】:

所以假设我有一个具有 100 GB 内存的集群供 spark 使用。我有一个 2000 GB 的数据集,并且想要运行这个数据集的迭代应用程序。 200 次迭代。

我的问题是,当使用 .cache() 时,spark 会将前 100 GB 保留在内存中并执行 200 次迭代,然后再自动读取下一个 100 GB?

在内存限制范围内工作时,sparks 的优势非常明显,但在处理更大的数据集时,我并不完全确定 spark 和 yarn 是如何管理数据的。

【问题讨论】:

    标签: memory apache-spark ram


    【解决方案1】:

    这不是您将看到的行为。 Spark 的缓存是使用 LRU eviction 完成的,因此如果您缓存的数据集对于内存来说太大了,那么只有最近使用的部分会保留在内存中。但是,spark 也有 MEMORY_AND_DISK 持久性模式(在 https://spark.apache.org/docs/latest/programming-guide.html#rdd-persistence 中有更详细的描述),听起来它可能非常适合您的情况。

    【讨论】:

    • 谢谢。因此,当使用带有 MEMORY_AND_DISK 参数的 .persist() 时,火花必须在每次迭代后从磁盘读取?好处是不会在每次迭代后使用沿袭重新计算 RDD,对吧?
    • 就是这样。通常从本地磁盘读取比重新计算数据要快。
    猜你喜欢
    • 2018-07-10
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 2014-12-21
    相关资源
    最近更新 更多