【发布时间】:2015-07-21 16:08:37
【问题描述】:
现在我正在学习如何使用 spark。我有一段可以反转矩阵的代码,当矩阵的阶数像 100 这样小的时候它可以工作。但是当矩阵的阶数像 2000 这样大时,我有像这样的例外:
15/05/10 20:31:00 ERROR DiskBlockObjectWriter: Uncaught exception while reverting partial writes to file /tmp/spark-local-20150510200122-effa/28/temp_shuffle_6ba230c3-afed-489b-87aa-91c046cadb22
java.io.IOException: No space left on device
在我的程序中,我有很多这样的行:
val result1=matrix.map(...).reduce(...)
val result2=result1.map(...).reduce(...)
val result3=matrix.map(...)
(很抱歉,因为那里的代码太多了)
所以我认为,当我这样做时,Spark 创建了一些新的 rdd,并且在我的程序中 Spark 创建了太多的 rdd,所以我有例外。我不确定我的想法是否正确。
如何删除不再使用的rdds?比如result1和result2?
我试过rdd.unpersist(),还是不行。
【问题讨论】:
-
我可能错了,但通常 spark 会将所有内容保存在内存中,如果它正在填满您的硬盘驱动器,可能您没有给他足够的 RAM 来开始。无论如何,您不能删除您“认为”不再使用的 RDD..
-
您不必删除它们。 Result_i 仅在计算 result_{i+1} 所需的时间内保留(它仍然可以存储,但可以被覆盖)。您可能无法从您的一项计算中存储临时文件。
-
但我不明白为什么我有 IOException 说设备上没有剩余空间...
-
Databricks 支持论坛的这个答案可能是相关的:forums.databricks.com/questions/277/…
标签: apache-spark rdd