现在我正在学习如何使用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
Run Code Online (Sandbox Code Playgroud)
在我的程序中,我有很多这样的行:
val result1=matrix.map(...).reduce(...)
val result2=result1.map(...).reduce(...)
val result3=matrix.map(...)
Run Code Online (Sandbox Code Playgroud)
(对不起,因为代码是很多人写的)
所以我想当我这样做时,Spark会创建一些新的rdds,并且在我的程序中Spark会创建太多rdds所以我有例外.我不确定我认为是否正确.
如何删除不再使用的rdds?比如result1和result2?
我试过rdd.unpersist(),它不起作用.
rah*_*ati 11
这是因为Spark在本地系统的/ tmp目录下创建了一些临时shuffle文件.您可以通过在spark conf文件中设置以下属性来避免此问题.
在spark-evn.sh中设置此属性.
SPARK_JAVA_OPTS+=" -Dspark.local.dir=/mnt/spark,/mnt2/spark -Dhadoop.tmp.dir=/mnt/ephemeral-hdfs"
export SPARK_JAVA_OPTS
Run Code Online (Sandbox Code Playgroud)