【问题标题】:RDD Memory footprint in sparkSpark中的RDD内存占用
【发布时间】:2016-05-05 21:04:56
【问题描述】:

我不确定内存足迹的概念。加载例如镶木地板文件时。 1GB 并在 Spark 中创建 RDD,每个 RDD 的内存食物打印是多少?

【问题讨论】:

    标签: apache-spark compression rdd parquet memory-footprint


    【解决方案1】:

    当您从 parquet 文件创建 RDD 时,在您对 RDD 运行操作(例如,首先,收集)之前,不会加载/执行任何内容。

    现在您的内存占用量很可能会随着时间的推移而变化。假设您有 100 个分区并且它们的大小相同(每个 10 MB)。假设您在具有 20 个内核的集群上运行,那么在任何时间点您只需要在内存中拥有 10MB x 20 = 200MB 数据。

    此外,鉴于 Java 对象往往会占用更多空间,因此很难准确地说出 1GB 文件将在 JVM 堆中占用多少空间(假设您加载了整个文件)。它可以是我的 2 倍,也可以是更多。

    您可以做的一个测试方法是强制缓存您的 RDD。然后,您可以在 Storage 下查看 Spark UI,查看 RDD 缓存了多少空间。

    【讨论】:

    • 感谢马里奥斯的回复。当您提到分区时,它是从 parquet 文件中创建的 RDD 吗?由于 RDD 不是物理实体,因此只有基于我们执行的操作的内存中的数据,我理解对吗?也可能有不相等的分区吗?
    • 所有RDD都被分区,否则没有并行性。你是对的,RDD 直到需要时才会实现(它们是懒惰的)。如果是一个大的 parquet 文件,它应该是相当均匀的分区。是的,在某些情况下分区是不平衡的,尤其是当 RDD 是从许多小文件而不是一个大文件生成时。
    【解决方案2】:

    Marios,在您的记忆投影中,您没有考虑 Parquet 的压缩。 1Gb 很可能是未压缩的 5GB。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-08
      • 1970-01-01
      • 2015-08-21
      相关资源
      最近更新 更多