如何使用spark-submit将参数/属性传递给Spark作业

时间:2016-11-10 19:13:52

标签: java apache-spark command-line

我使用time-start运行使用Java实现的Spark作业。我想将参数传递给这份工作 - 例如一个time-end--conf key=value 参数,用于参数化Spark应用程序。

我尝试的是使用

spark-submit
sparkContext.getConf().get("key") 脚本的

选项,但是当我尝试使用

读取Spark作业中的参数时
Exception in thread "main" java.util.NoSuchElementException: key

我得到一个例外:

sparkContext.getConf().toDebugString()

此外,当我使用{{1}}时,我在输出中看不到我的值。

进一步注意由于我想通过Spark REST服务提交Spark作业,因此无法使用OS环境变量等。

有可能实现这个吗?

3 个答案:

答案 0 :(得分:4)

由于您要使用自定义属性,因此您需要在application.jar spark-submit之后放置属性(例如,火花示例[application-arguments]应该是您的属性。--conf应该是火花配置属性。

  

- conf:以key = value格式的任意 Spark配置属性。对于包含空格的值,用引号括起“key = value”(如图所示)。

./bin/spark-submit \
  --class <main-class> \
  --master <master-url> \
  --deploy-mode <deploy-mode> \
  --conf <key>=<value> \
  ... # options
  <application-jar> \
  [application-arguments] <--- here our app arguments

所以,当您执行spark-submit .... app.jar key=value方法main时,您将获得args[0] key=value

public static void main(String[] args) {
    String firstArg = args[0]; //eq. to key=value
}

但你想使用key value对,你需要以某种方式解析你的app arguments

您可以查看Apache Commons CLI library或其他替代方法。

答案 1 :(得分:2)

Spark配置将仅使用spark命名空间中的键。如果您不想使用独立配置工具,可以尝试:

--conf spark.mynamespace.key=value

答案 2 :(得分:1)

你可以传递这样的参数:

./bin/spark-submit \
  --class $classname \
  --master XXX \
  --deploy-mode XXX \
  --conf XXX \
  $application-jar --**key1** $**value** --**key2** $**value2**\

请务必使用适当的值替换key1key2value