Apache Spark不会删除临时目录

zeo*_*dtr 33 apache-spark

火花程序完成后,临时目录中还有3个临时目录.目录名称是这样的:spark-2e389487-40cc-4a82-a5c7-353c0feefbb7

目录是空的.

当Spark程序在Windows上运行时,一个快速的DLL文件也会保留在临时目录中.文件名是这样的:snappy-1.0.4.1-6e117df4-97b6-4d69-bf9d-71c4a627940c-snappyjava

每次Spark程序运行时都会创建它们.因此文件和目录的数量不断增长.

如何删除它们?

使用Hadoop 2.6,Spark版本为1.3.1.

UPDATE

我已经跟踪了火花源代码.

创建3'temp'目录的模块方法如下:

  • DiskBlockManager.createLocalDirs
  • HttpFileServer.initialize
  • SparkEnv.sparkFilesDir

他们(最终)调用Utils.getOrCreateLocalRootDirs然后调用Utils.createDirectory,它故意不标记目录以进行自动删除.

createDirectory方法的注释说:"保证目录是新创建的,并且没有标记为自动删除."

我不知道为什么他们没有标记.这真的是故意的吗?

yjs*_*hen 23

SPARK_WORKER_OPTS存在三个以支持工作者应用程序文件夹清理,这里复制以供进一步参考:来自Spark Doc

  • spark.worker.cleanup.enabled,默认值为false,启用定期清理worker/application目录.请注意,这仅影响独立模式,因为YARN的工作方式不同.仅清除已停止的应用程序的目录.

  • spark.worker.cleanup.interval,默认值为1800,即30分钟,控制工作人员在本地计算机上清理旧应用程序工作目录的时间间隔(以秒为单位).

  • spark.worker.cleanup.appDataTtl,默认为7*24*3600(7天),保留每个工作程序上的应用程序工作目录的秒数.这是一个生存时间,应该取决于您拥有的可用磁盘空间量.应用程序日志和jar将下载到每个应用程序工作目录.随着时间的推移,工作目录可以快速填满磁盘空间,特别是如果您经常运行作业.

  • 谢谢,但它仅适用于Spark独立模式.'temp'目录是为本地模式和YARN-client模式创建的. (5认同)

van*_*jar 18

我假设您仅使用"本地"模式进行测试.我通过在运行测试之前创建自定义临时文件夹然后手动删除它来解决了这个问题(在我的情况下,我在JUnit中使用本地模式,因此临时文件夹会自动删除).

您可以通过spark.local.dir属性更改Spark的临时文件夹的路径.

SparkConf conf = new SparkConf().setMaster("local")
                                .setAppName("test")
                                .set("spark.local.dir", "/tmp/spark-temp");
Run Code Online (Sandbox Code Playgroud)

测试完成后,我会/tmp/spark-temp手动删除该文件夹.


小智 0

我不认为所有场景都支持清理。我建议编写一个简单的 Windows 调度程序来每晚进行清理。