我们有extraJavaOptions可以在spark提交中发送Java参数。但是由于某种原因,spark作业无法使用Java参数。因此,我尝试不使用spark.driver.extraJavaOptions
和spark.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 &`
答案 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
来解决这些问题。