文档首页/ MapReduce服务 MRS/ 开发指南(普通版_3.x)/ Spark2x开发指南(安全模式)/ Spark应用开发常见问题/ 在客户端安装节点的/tmp目录下残留了很多blockmgr-开头和spark-开头的目录
更新时间:2024-08-05 GMT+08:00

在客户端安装节点的/tmp目录下残留了很多blockmgr-开头和spark-开头的目录

问题

系统长时间运行后,在客户端安装节点的/tmp目录下,发现残留了很多blockmgr-开头和spark-开头的目录。

图1 残留目录样例

回答

Spark任务在运行过程中,driver会创建一个spark-开头的本地临时目录,用于存放业务jar包,配置文件等,同时在本地创建一个blockmgr-开头的本地临时目录,用于存放block data。此两个目录会在Spark应用运行结束时自动删除。

此两个目录的存放路径优先通过SPARK_LOCAL_DIRS环境变量指定,若不存在该环境变量,则设置为spark.local.dir的值,若此配置还不存在,则使用java.io.tmpdir的值。客户端默认配置中spark.local.dir被设置为/tmp,因此默认使用系统/tmp目录。

但存在一些特殊情况,如driver进程未正常退出,比如被kill -9命令结束进程,或者Java虚拟机直接崩溃等场景,导致driver的退出流程未正常执行,则可能导致该部分目录无法被正常清理,残留在系统中。

当前只有yarn-client模式和local模式的driver进程会产生上述问题,在yarn-cluster模式中,已将container内进程的临时目录设置为container临时目录,当container退出时,由container自动清理该目录,因此yarn-cluster模式不存在此问题。

解决措施

可在Linux下设置/tmp临时目录自动清理,或修改客户端中spark-defaults.conf配置文件的spark.local.dir配置项的值,将临时目录指定到特定的目录,再对该目录单独设置清理机制。