2014-03-28 58 views
0

我想要一個外部配置文件,我將它傳遞給SparkJobs。假設我是從組裝和配置上運行我的工作文件中對我的本地文件系統:將配置傳遞給Spark Job

spark-class my.assembly.jar my_application.conf 

這將是巨大的,如果我可以訪問配置文件在火花的工作,但其不可能的,則執行其主要方法在另一個節點上。

我一直在嘗試使用spark類的--files參數,但這似乎不起作用。

類似行爲(以--files)火花REPL試圖用錯誤結束:

val inFile = sc.textFile(SparkFiles.get("conf.a")) 
inFile.first() 

上述假定文件conf.a已經傳給火花類--files選項。

對這個問題有什麼想法?如何解決這個問題?我真的很喜歡使用外部文件作爲配置源。

我使用Apache的火花0.9.0

+0

發現本教程:http://docs.sigmoidanalytics.com/index.php/Using_the_Spark_Shell - 它非常類似於我嘗試設置的方式,不幸的是它不適用於我。 –

回答

1

您可以使用sc.addFile(path),使您的文件中看到所有的節點:

object MySparkApp extends App { 
    override def main(args: Array[String]) { 
    val sc = new SparkContext("local", "MySparkApp", "/opt/spark", jarOfObject(this.getClass)) 

    sc.addFile(args(1)) 

    val rdd = sc.textFile(SparkFiles.get("conf.a")) 
    } 
} 

> sbt run MySparkApp /tmp/conf.a 

注意,使用SparkFiles.get(path)當我只給文件名,而不是完整路徑:這是因爲該文件來自我的本地文件系統,所以它將被複制到作業工作目錄。

0

最簡單的方法是將文件加載到HDFS集羣。您鏈接的教程假定該文件存在於HDFS &因此可通過羣集訪問。如果你不能那麼addfile自變量Freidereikhs會爲你工作,但你必須將conf文件與應用程序捆綁在一起。