0

假设我们从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将驻留在哪里)。

4

1 回答 1

2

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

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

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

于 2016-06-24T14:16:58.163 回答