如何在spark-submit命令中指定要使用的java版本?

我想在远程服务器上的纱线群集上运行火花流应用程序。 默认的java版本是1.7,但我想为我的应用程序使用1.8,它也在服务器中,但不是默认值。 有没有办法通过spark-submit指定java 1.8的位置,这样我就不会遇到major.minor错误?

JAVA_HOME在我们的情况下是不够的,驱动程序在java 8中运行,但我后来发现YARN中的Spark工作者是使用java 7启动的(hadoop节点都安装了java版本)。

我不得不在spark-defaults.conf添加spark.executorEnv.JAVA_HOME=/usr/java/spark.executorEnv.JAVA_HOME=/usr/java/ 。 请注意,您可以在命令行中使用--conf提供它。

请参阅http://spark.apache.org/docs/latest/configuration.html#runtime-environment

虽然您可以强制驱动程序代码在特定Java版本上运行( export JAVA_HOME=/path/to/jre/ && spark-submit ... ),但工作人员将使用纱线用户的PATH中的默认Java版本执行代码来自工人机器。

您可以做的是通过编辑spark-env.sh文件( 文档 )将每个Spark实例设置为使用特定的JAVA_HOME

在spark-env.sh中添加你想要的JAVA_HOME(sudo find -name spark-env.sh … ej .: /etc/spark2/conf.cloudera.spark2_on_yarn/spark-env.sh)

如果要为spark on yarn设置java环境,可以在spark-submit之前设置它

 --conf spark.yarn.appMasterEnv.JAVA_HOME=/usr/java/jdk1.8.0_121 \