Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Apache Spark不删除临时目录_Apache Spark - Fatal编程技术网

Apache spark Apache Spark不删除临时目录

Apache spark Apache Spark不删除临时目录,apache-spark,Apache Spark,spark程序完成后,临时目录中仍保留3个临时目录。 目录名如下:spark-2e389487-40cc-4a82-a5c7-353c0feefbb7 目录是空的 当Spark程序在Windows上运行时,一个snappy DLL文件也会保留在临时目录中。 文件名如下:snappy-1.0.4.1-6e117df4-97b6-4d69-bf9d-71c4a627940c-snappyjava 每次Spark程序运行时都会创建它们。因此,文件和目录的数量不断增加 如何让它们被删除 Spark版本是

spark程序完成后,临时目录中仍保留3个临时目录。 目录名如下:spark-2e389487-40cc-4a82-a5c7-353c0feefbb7

目录是空的

当Spark程序在Windows上运行时,一个snappy DLL文件也会保留在临时目录中。 文件名如下:snappy-1.0.4.1-6e117df4-97b6-4d69-bf9d-71c4a627940c-snappyjava

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

如何让它们被删除

Spark版本是1.3.1和Hadoop 2.6

更新

我追踪了spark的源代码

创建3个“临时”目录的模块方法如下:

  • DiskBlockManager.createLocalDirs
  • HttpFileServer.initialize
  • SparkEnv.sparkFilesDir
它们(最终)调用Utils.getOrCreateLocalRootDirs,然后调用Utils.createDirectory,后者故意不将目录标记为自动删除

createDirectory方法的注释是:“保证目录 新创建的,未标记为自动删除。“


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

我不认为所有场景都支持清理。我建议编写一个简单的windows计划程序来每晚清理。

我不知道如何使Spark清理这些临时目录,但我能够阻止创建snappy XXX文件。这可以通过两种方式实现:

  • 禁用压缩。属性:spark.broadcast.compress、spark.shuffle.compress、spark.shuffle.spill.compress。看
  • 使用LZF作为压缩编解码器。Spark对Snappy和lz4使用本机库。由于JNI的工作方式,Spark在使用这些库之前必须先解包。LZF似乎是在Java中本机实现的
    我在开发过程中会这样做,但对于生产环境,可能最好使用压缩和脚本来清理临时目录。

    Three
    SPARK\u WORKER\u OPTS
    用于支持WORKER应用程序文件夹清理,复制到此处以供进一步参考:从

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

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

    • spark.worker.cleanup.appDataTtl
      ,默认值为7*24*3600(7天),即在每个worker上保留应用程序工作目录的秒数。这是一个生存的时期,应该取决于可用磁盘空间的大小。应用程序日志和JAR下载到每个应用程序工作目录。随着时间的推移,工作目录会很快填满磁盘空间,特别是在您非常频繁地运行作业的情况下


    我假设您使用“本地”模式仅用于测试目的。我通过在运行测试之前创建一个自定义临时文件夹来解决这个问题,然后手动删除它(在我的例子中,我在JUnit中使用本地模式,所以临时文件夹会自动删除)

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

    SparkConf conf=new SparkConf().setMaster(“本地”)
    .setAppName(“测试”)
    .set(“spark.local.dir”,“/tmp/spark temp”);
    

    测试完成后,我将手动删除
    /tmp/spark temp
    文件夹。

    您需要在程序结束时创建的spark上下文上调用close()。

    对于
    spark.local.dir
    ,它将只移动spark temp文件,但snappy xxx文件仍将存在于/tmp dir中。 虽然没有找到让spark自动清除的方法,但您可以设置JAVA选项:

    JVM_EXTRA_OPTS=" -Dorg.xerial.snappy.tempdir=~/some-other-tmp-dir"
    

    要使其移动到另一个目录,因为大多数系统的/tmp大小都很小。

    虽然我还没有测试过,但可以设置系统属性org.xerial.snappy.lib.path,以便snappy模块查找snappy DLL,而不是无条件提取DLL。请参阅源文件的注释,但根据,它可能已被解析。也许Spark有较旧的库?谢谢,但它仅适用于Spark独立模式。“temp”目录是为本地模式和客户端模式创建的。谢谢,这是一个可能的解决方法。顺便说一句,我已经为这个问题提交了JIRA。请看。谢谢你保存了这一天。有什么方法可以自动删除这些文件吗?