【问题标题】:Passing configuration to Spark Job将配置传递给 Spark 作业
【发布时间】:2014-05-07 20:37:12
【问题描述】:

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

spark-class my.assembly.jar my_application.conf

如果我能在spark job中访问配置文件就好了,但是不可能,它的main方法是在另一个节点上执行的。

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

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

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

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

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

我正在使用 apache-spark-0.9.0

【问题讨论】:

标签: apache-spark


【解决方案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)时,我只给出文件名,而不是完整路径:这是因为文件来自我的本地文件系统,所以它将被复制到作业工作目录。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-24
      • 2015-05-06
      • 2012-08-09
      • 2015-01-14
      • 1970-01-01
      • 1970-01-01
      • 2015-03-25
      相关资源
      最近更新 更多