在spark submit命令中使用jar之前,如何使用extraJavaOptions单独发送参数

在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

我们有extraJavaOptions来发送spark submit中的java参数。但由于某些原因,spark作业无法获取java参数。因此,我尝试使用
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。如果您在问题中添加此检查代码的示例,可能会有所帮助。