在spark submit命令中使用jar之前,如何使用extraJavaOptions单独发送参数
我们有extraJavaOptions来发送spark submit中的java参数。但由于某些原因,spark作业无法获取java参数。因此,我尝试使用在spark submit命令中使用jar之前,如何使用extraJavaOptions单独发送参数,java,apache-spark,Java,Apache Spark,我们有extraJavaOptions来发送spark submit中的java参数。但由于某些原因,spark作业无法获取java参数。因此,我尝试使用spark.driver.extraJavaOptions和spark.executor.extraJavaOptions发送这些java参数,而不使用out 我尝试将参数与jar一起发送,但没有成功 真的有其他方法发送这些参数吗。我现在正在使用spark 2.3.1版本 这是我最初的spark命令: output=`spark-submit
spark.driver.extraJavaOptions
和spark.executor.extraJavaOptions
发送这些java参数,而不使用out
我尝试将参数与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 &`
首先,我建议您将
--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
来处理这些问题。我已经检查了spark UI上的spark launch命令,看到所有jvm参数都按照预期值顺利传递。但它仍然不起作用。所以,这就是我检查是否有其他方法可以不使用extraJavaOptionsOK传递jvm参数的原因,那么以什么方式不起作用呢?你想做什么,实际发生了什么?所以当我说它不起作用时,我的意思是,我在我的源代码中检查java参数是否为null。即使我在extraJavaOptions中发送java参数,即使在spark-launch命令中看到java参数发送良好,我的源代码仍然抛出一个错误,指出java参数是emptyOK。如果您在问题中添加此检查代码的示例,可能会有所帮助。