Spark:java.io.IOException:设备上没有剩余空间

赵祥宇*_*赵祥宇 7 apache-spark rdd

现在我正在学习如何使用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)

  • 此设置如何避免临时文件磁盘空间问题? (2认同)