【问题标题】:Spark temporary files -- snappySpark 临时文件——snappy
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 根据您的部署方式,您可能需要以这种方式使用--driver-java-options --driver-java-options -Djava.io.tmpdir=myPath。这应该是纱线客户端模式的全部内容。 Yarn 本身将管理节点管理器的临时目录。
    猜你喜欢
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多