我们如何在Spark Submit命令中的jar之前不使用extraJavaOptions单独发送参数

时间:2019-01-11 15:18:21

标签: java apache-spark

我们有extraJavaOptions可以在spark提交中发送Java参数。但是由于某种原因,spark作业无法使用Java参数。因此,我尝试不使用spark.driver.extraJavaOptionsspark.executor.extraJavaOptions发送这些Java参数。

我尝试将参数与jar一起发送,但没有用

确实存在另一种发送这些参数的方法。我现在正在使用spark 2.3.1版本。

这是我最初的spark命令:

output=`spark-submit \
    --class com.demo.myApp.App \
    --conf 'spark.executor.extraJavaOptions=-Dapp.env="$ENV" - 
    Dapp.country="$COUNTRY" -Dapp.year="$YEAR" - 
    Doracle.net.tns_admin=/work/artifacts/oracle/current - 
    Djava.security.egd=file:/dev/./urandom' \
    --conf 'spark.driver.extraJavaOptions=-Dapp.env="$ENV" - 
    Dapp.country="$COUNTRY" -Dapp.year="$YEAR" - 
    Doracle.net.tns_admin=/work/artifacts/oracle/current - 
    Djava.security.egd=file:/dev/./urandom' \
    --executor-memory "$EXECUTOR_MEMORY" \
    --executor-cores "$EXECUTOR_CORES" \
    --total-executor-cores "$TOTAL_CORES" \
    --driver-memory "$DRIVER_MEMORY" \
    --deploy-mode cluster \
    /home/spark/demo/myApp/current/my-app-*.jar 2>&1 &`

1 个答案:

答案 0 :(得分:0)

首先,我建议您将--verbose标志添加到spark-submit,以便可以检查spark是否正确填充和解析了参数。

在示例命令中,shell引用似乎不正确(单引号内有双引号),因此$ENV之类的变量将不会被其值替换。我通常使用普通的双引号,例如:

--conf "spark.executor.extraJavaOptions=-Dapp.env=$ENV
        -Dapp.country=$COUNTRY -Dapp.banner=$YEAR" \

您没有描述如何尝试阅读或检查这些参数-如果将其添加到问题中可能会有所帮助。您可以尝试从作业代码中打印出所有JVM系统属性,以查看它们是否按预期到达。

对于要在您的Spark代码中直接读取的参数,可以将它们指定为spark-submit,格式为:

--conf spark.myApp.mySetting=foo \
--conf spark.myApp.anotherSetting=bar \

然后从代码中的SparkConf对象中读取它们。但是,这对于打算由库代码读取的环境变量无效。您将需要extraJavaOptions来解决这些问题。