在 alluxio/tachyon 中转换 RDD 的内存使用情况 for Spark



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

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

rdd2驻留在alluxio堆上还是spark堆上。

也会像这样的操作(两对RDD在alluxio上) pairRDD1.join(pairRDD2)在alluxio或Spark堆上创建一个新的RDD。

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

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

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

生成的RDD

驻留位置取决于您对该RDD执行的操作。如果要将生成的RDD写入文件,则该RDD将不会在Spark内存中完全具体化,但会写出到文件中。如果该文件在Alluxio中,它将在Alluxio内存中,而不是Spark内存中。生成的 RDD 只有在显式调用 cache() 时才在 Spark 内存中。

最新更新