2016-06-09 15 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內存中。