将配置传递给Spark Job

时间:2014-03-28 11:43:08

标签: apache-spark

我想要一个我传递给SparkJobs的外部配置文件。假设我正在运行我的本地文件系统中的程序集和配置文件:

spark-class my.assembly.jar my_application.conf

如果我能在spark作业中访问配置文件会很棒,但它不可能,它的主要方法在另一个节点上执行。

我一直在尝试为spark-class使用--files参数,但这似乎不起作用。

在spark repl中尝试的类似行为(to --files)以错误结束:

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

以上假设文件 conf.a 已通过--files选项传递给spark-class。

对这个问题有什么看法?如何解决这个问题?我真的很想使用外部文件作为配置源。

我正在使用apache-spark-0.9.0

2 个答案:

答案 0 :(得分: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)时我只提供文件名,而不是完整路径:这是因为该文件来自我的本地文件系统,因此它将被复制到作业工作目录。

答案 1 :(得分:0)

最简单的方法是将文件加载到 HDFS 群集中。您链接的教程假定该文件存在于 HDFS &因此可以通过集群访问。如果你不能,那么 Freidereikhs 给出的addfile参数将对你有用,但是你必须将conf文件与应用程序捆绑在一起。