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

如何在spark submit命令中指定要使用的java版本?,java,yarn,spark-streaming,Java,Yarn,Spark Streaming,我想在远程服务器上的纱线集群上运行spark流媒体应用程序。默认的java版本是1.7,但我想对我的应用程序使用1.8,它也存在于服务器中,但不是默认版本。有没有一种方法可以通过spark submit指定java 1.8的位置,这样我就不会出现大的、小的错误?尽管您可以强制驱动程序代码在特定的java版本上运行(export java_HOME=/path/to/jre/&&spark submit… ),工人将使用默认Java版本从工人机器的用户路径执行代码 您可以通过编辑Spark env

我想在远程服务器上的纱线集群上运行spark流媒体应用程序。默认的java版本是1.7,但我想对我的应用程序使用1.8,它也存在于服务器中,但不是默认版本。有没有一种方法可以通过spark submit指定java 1.8的位置,这样我就不会出现大的、小的错误?

尽管您可以强制驱动程序代码在特定的java版本上运行(
export java_HOME=/path/to/jre/&&spark submit…
),工人将使用默认Java版本从工人机器的用户路径执行代码


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

JAVA_HOME在我们的例子中是不够的,驱动程序是在JAVA 8中运行的,但我后来发现,Spark workers in Thread是使用JAVA 7启动的(hadoop节点都安装了JAVA版本)

我不得不在
spark defaults.conf
中添加
spark.executenv.JAVA\u HOME=/usr/JAVA/
。注意,您可以在命令行中使用
--conf
提供它


请参见

在spark-env.sh(sudo find-name spark-env.sh…ej.:/etc/spark2/conf.cloudera.spark2_on_纱线/spark env.sh)中添加所需的JAVA_HOME)

如果要为spark on纱线设置JAVA环境,可以在spark提交之前进行设置

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

需要为Spark App Master和Spark Executors设置Java版本,Spark Executors将在Thread上启动。因此,spark submit命令必须包括两个JAVA_HOME设置:spark.executenv.JAVA_HOMEspark.warn.appMasterEnv.JAVA_HOME


你用maven?如果是这样,您可以在pom.xml中指定java版本,或者您可以在spark提交之前将java_设置为HOME。如下所示:“JAVA_HOME=/path/to/JAVA./bin/spark submit……”在spark submit命令对我起作用之前设置JAVA_HOME。谢谢:)@Hlib,这样做更改了驱动程序的当前应用程序的java版本,而不是集群中的执行器,它们的默认java版本为1.7。您是否也可以建议一种解决方法?您是否尝试在$SPARK\u HOME$/conf/SPARK env.sh中指定JAVA\u HOME?对于那些没有权限在工作节点上检查JAVA版本的人,请使用
SPARK.range(01000).mapPartitions(u=>JAVA.lang.System.getProperty(“JAVA.version”))。show
进行健全性检查。通过Thread/spark UI确定运行时java版本可能太难,需要设置spark.ExecuteEnv.java_HOME和spark.Thread.appMasterEnv.java_HOME。
spark-submit --class com.example.DataFrameExample --conf "spark.executorEnv.JAVA_HOME=/jdk/jdk1.8.0_162" --conf "spark.yarn.appMasterEnv.JAVA_HOME=/jdk/jdk1.8.0_162" --master yarn --deploy-mode client /spark/programs/DataFrameExample/target/scala-2.12/dfexample_2.12-1.0.jar