Spark临时文件 - 活泼

时间:2016-03-07 18:47:02

标签: scala apache-spark

我知道有一些关于Spark的临时文件like this one的问题,但我找不到一个能回答我问题的问题。

我在独立模式下使用Spark 1.6.0并且我在Windows下运行它,所以当我在每个worker上设置SPARK_LOCAL_DIRS时,这会提供写入临时文件的信息。尽管如此,我使用snappy得到了一个奇怪的行为。事实上,无论我尝试过什么,每个执行者都会将snappy的dll副本写入我的C:\Windows目录(这真的很糟糕)。应该处理Spark中临时文件的代码片段是:

def getConfiguredLocalDirs(conf: SparkConf): Array[String] = {
   ...
   else if (conf.getenv("SPARK_EXECUTOR_DIRS") != null) {
      conf.getenv("SPARK_EXECUTOR_DIRS").split(File.pathSeparator)
   } else if (conf.getenv("SPARK_LOCAL_DIRS") != null) {
      conf.getenv("SPARK_LOCAL_DIRS").split(",")
   } ... (stuffs on mesos)
   } else {
      // In non-Yarn mode (or for the driver in yarn-client mode), we cannot trust the user
      // configuration to point to a secure directory. So create a subdirectory with restricted
     // permissions under each listed directory.
     conf.get("spark.local.dir", System.getProperty("java.io.tmpdir")).split(",")
    }
}

我尝试了这些的任意组合,但我总是snappy-1.1.2-*-snappyjava.dll C:\Windows(我想我得到了这个,因为这是java.io.tmpdir)。

有人知道如何设置执行者写下dll的临时目录吗?感谢。

编辑。这确实是由于属性java.io.tmpdir,我可以更改它:

val opt = "-Djava.io.tmpdir=myPath"
conf.set("spark.executor.extraJavaOptions", opt)

但是,不幸的是,这使得任何机器上的每个执行器都完全相同。

1 个答案:

答案 0 :(得分:2)

因此,在Spark 1.6.0独立版,Windows中选择Snappy的dll副本目录似乎缺少实现(或者它的意思可能只是用于那个' d很奇怪,因为事后没有清理......)。它总是使用java.io.tmpdir作为序列化目录,因此如果想要设置它。它应该在工人方面设置,例如使用选项-Djava.io.tmpdir=myPath并在驱动程序端启动worker的JVM(与启动应用程序的JVM的worker相同)。