【问题标题】:Memory usage for transformation on RDD's in alluxio/tachyon for spark在 alluxio/tachyon 中用于 Spark 的 RDD 转换的内存使用情况
【发布时间】:2018-10-07 02:10:59
【问题描述】:

假设我们从alluxio内存创建一个RDD

rdd1 = sc.textFile("alluxio://.../file1.txt")
rdd2 = rdd1.map(...)

rdd2 是否驻留在alluxiospark 的堆上。

也会有类似的操作(alluxio 上的两个 pairRDD) pairRDD1.join(pairRDD2) 在 alluxio 或 spark 堆上创建一个新的 RDD。

第二个问题的原因是我需要在alluxio上加入2个大型RDD。连接会使用alluxio的内存还是RDD会被拉入火花内存以进行连接(以及生成的RDD将驻留在哪里)。

【问题讨论】:

  • -map 的输出被写入 OS BUFFER CACHE。 - 操作系统将决定数据是否可以保留在操作系统缓冲区缓存中,或者是否应该溢出到磁盘。

标签: python apache-spark pyspark alluxio


【解决方案1】:

Spark 转换以惰性方式进行评估。这意味着map() 在需要结果之前不会被评估,并且不会消耗任何 Spark 内存。只有在 RDD 上显式调用 cache() 时,RDD 才会消耗 Spark 内存。

因此,当你从 Alluxio 中加入 2 个 RDD 时,在 Alluxio 中,只有 RDD 的源数据将是内存。在 join 期间,Spark 将使用执行 join 所需的内存。

生成的 RDD 所在的位置取决于您对该 RDD 执行的操作。如果您将生成的 RDD 写入文件,则该 RDD 不会在 Spark 内存中完全实现,但会被写入文件。如果该文件在 Alluxio 中,它将在 Alluxio 内存中,而不是在 Spark 内存中。如果您显式调用 cache(),则生成的 RDD 只会在 Spark 内存中。

【讨论】:

    猜你喜欢
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 2016-04-13
    相关资源
    最近更新 更多