假设我们从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 内存中。