2016-06-09 13 views
0

假设我们从alluxio内存对RDD在alluxio转型内存使用/超光速粒子的火花

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

是否rdd2驻留在alluxiospark的堆创建RDD。

也可以在alluxio或spark堆上创建一个新的RDD(类似于alluxio上的pairRDD) pairRDD1.join(pairRDD2)

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

+0

- map的输出写入OS BUFFER CACHE。 - 操作系统将决定数据是否可以保留在操作系统缓冲区 缓存中或者是否应该分散到DISK中。 – RoyaumeIX

回答

1

Spark转换以懒惰的方式进行评估。这意味着map()将不会被评估,直到需要结果,并且不会消耗任何Spark内存。如果您在RDD上明确呼叫cache(),则RDD将仅消耗Spark内存。

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

产生的RDD所在的位置取决于您对RDD所做的操作。如果您将生成的RDD写入文件,那么RDD将不会在Spark内存中完全物化,而是会写入文件中。如果该文件位于Alluxio中,则该文件位于Alluxio内存中,而不是Spark内存。如果您明确地调用cache(),则生成的RDD将只在Spark内存中。