我想在远程服务器上的纱线集群上运行一个火花流应用程序。默认的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/<version available in workers>
.请注意,您可以使用 --conf
在命令行中提供它。
见 http://spark.apache.org/docs/latest/configuration.html#runtime-environment
尽管您可以强制驱动程序代码在特定 Java 版本上运行 ( export JAVA_HOME=/path/to/jre/ && spark-submit ...
),工作线程将使用 yarn 用户在工作计算机的 PATH 中使用的默认 Java 版本执行代码。
您可以做的是通过编辑spark-env.sh
文件(文档)将每个 Spark 实例设置为使用特定JAVA_HOME
。
如果你想在 spark on yarn 上设置 java 环境,可以在 spark-submit 之前设置它
--conf spark.yarn.appMasterEnv.JAVA_HOME=/usr/java/jdk1.8.0_121
在 spark-env.sh 中添加您想要的JAVA_HOME(sudo find -name spark-env.sh ...呃。:/etc/spark2/conf.cloudera.spark2_on_yarn/spark-env.sh)
需要为将在YARN上启动的Spark App Master和Spark Executors设置Java版本。因此,spark-submit 命令必须包含两个JAVA_HOME设置:spark.executorEnv.JAVA_HOME 和 spark.yarn.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