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

Mic*_*ihs 5 java command-line apache-spark

我正在运行使用Java实现的Spark作业spark-submit.我想传递参数给这项工作-如time-starttime-end参数参数化星火应用.

我试过的是使用

--conf key=value
Run Code Online (Sandbox Code Playgroud)

spark-submit脚本的选项,但是当我尝试在我的Spark作业中读取参数时

sparkContext.getConf().get("key")
Run Code Online (Sandbox Code Playgroud)

我得到一个例外:

Exception in thread "main" java.util.NoSuchElementException: key
Run Code Online (Sandbox Code Playgroud)

此外,当我使用时,sparkContext.getConf().toDebugString()我没有在输出中看到我的价值.

进一步注意因为我想通过Spark REST服务提交我的Spark Job,所以我不能使用OS环境变量等.

有没有可能实现这个?

Vla*_*cak 5

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

--conf:键=值格式的任意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
Run Code Online (Sandbox Code Playgroud)

所以当您这样做时:spark-submit .... app.jar key=valuemain方法中,您将获得args[0]as key=value

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

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

您可以检查Apache Commons CLI库或其他替代方法。


小智 5

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

--conf spark.mynamespace.key=value
Run Code Online (Sandbox Code Playgroud)