2014-03-28 62 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文件与应用程序捆绑在一起。