2016-03-07 22 views
0

我知道有關於Spark的臨時文件like this one的一些問題,但我找不到解決我的問題的文件。Spark臨時文件 - snappy

我在獨立模式下使用Spark 1.6.0,我在Windows下運行它,所以當我在每個worker上設置SPARK_LOCAL_DIRS時,這會給出臨時文件寫入的信息。儘管如此,我收到了一個奇怪的行爲snappy。事實上,無論我嘗試了什麼,每個執行者都會將snappy的dll副本寫入我的C:\Windows目錄(這非常令人反感)。這是應該以應對星火臨時文件的一段代碼是:

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.dllC:\Windows(我想我得到這個,因爲這是java.io.tmpdir)。

有人知道如何設置執行者寫下dll的臨時目錄嗎?謝謝。

編輯。這確實是由於物業java.io.tmpdir,我可以改變它:

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

但不幸的是這使得這一切對任何機器上的每個執行相同的。

回答

0

所以它看起來像選擇了Spark 1.6.0獨立版,Windows中Snappy的dll副本的目錄缺少實現(或者它的意思是,但這會很奇怪,因爲它之後沒有清理過......) 。它始終使用java.io.tmpdir作爲序列化目錄,所以如果想要設置它。它應該在工人一方設置,例如使用選項-Djava.io.tmpdir=myPath和驅動程序端(與使用啓動應用程序的JVM的工作人員相同)啓動工作人員的JVM。

+0

根據您的部署方式,可能需要使用'--driver-java-options'這種方式'--driver-java-options -Djava.io.tmpdir = myPath'。這應該是所有紗線客戶端模式。紗本身將管理節點管理者的臨時目標。 – vpipkt