使用其他输入提交Spark

时间:2014-06-19 20:39:15

标签: apache-spark yarn

我使用Spark构建了一个机器学习管道,它将一个作业XML文件作为输入,用户可以在其中指定数据,功能,模型及其参数。使用此作业XML输入文件的原因是用户可以简单地修改其XML文件以配置管道,而无需从源代码重新编译。但是,目前Spark作业通常打包到一个uber-Jar文件中,当作业提交给YARN时,似乎无法提供额外的XML输入。

我想知道是否有任何解决方案或替代品?

3 个答案:

答案 0 :(得分:1)

我查看Spark-JobServer您可以使用它将您的作业与配置一起提交给Spark Cluster。您可能必须使您的XML适应配置使用的JSON格式,或者以某种方式封装它。

以下是有关如何提交作业+配置的示例:

curl -d "input.string = a b c a b see" 'localhost:8090/jobs?appName=test&classPath=spark.jobserver.WordCountExample'
{
  "status": "STARTED",
  "result": {
    "jobId": "5453779a-f004-45fc-a11d-a39dae0f9bf4",
    "context": "b7ea0eb5-spark.jobserver.WordCountExample"
  }
}

答案 1 :(得分:0)

如果要将xml文件与jar捆绑在一起,则应使用resources目录放置xml文件。这是一个基本的Java / Scala事物。

建议阅读:Get a resource using getResource()

要替换jar中的xml而不重建jar:How do I update one file in a jar without repackaging the whole jar?

答案 2 :(得分:0)

我用来解决这个问题的最终解决方案是:

  1. 将XML文件存储在HDFS中,

  2. 传入XML文件的文件位置

  3. 使用InputStreamHDFS直接从HDFS读取: val hadoopConf = sc.hadoopConfiguration val jobfileIn:Option[InputStream] = inputStreamHDFS(hadoopConf, filename) if (jobfileIn.isDefined) { logger.info("Job file found in file system: " + filename) xml = Some(XML.load(jobfileIn.get)) }