【发布时间】:2016-03-08 18:29:21
【问题描述】:
我知道有人对 Spark 的临时文件 like this one 有一些疑问,但我找不到能回答我问题的文件。
我在独立模式下使用 Spark 1.6.0,并在 Windows 下运行它,所以当我在每个工作人员上设置 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 的临时目录吗?谢谢。
EDIT.确实是java.io.tmpdir属性的原因,我可以用:
val opt = "-Djava.io.tmpdir=myPath"
conf.set("spark.executor.extraJavaOptions", opt)
但是,不幸的是,这对于任何机器上的每个执行程序都是一样的。
【问题讨论】:
标签: scala apache-spark