【问题标题】:How to specify which java version to use in spark-submit command?如何在 spark-submit 命令中指定要使用的 java 版本?
【发布时间】:2019-11-15 17:52:40
【问题描述】:

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

【问题讨论】:

  • 你使用maven?如果是这样,您可以在 pom.xml 中指定 java 版本
  • 也许您可以在 spark-submit 之前设置 JAVA_HOME。像这样:“JAVA_HOME=/path/to/java ./bin/spark-submit ......”
  • 在 spark-submit 命令为我工作之前设置 JAVA_HOME。谢谢:)
  • @Hlib ,这样做更改了驱动程序的当前应用程序的 java 版本,而不是集群中的执行程序,它们的默认 java 版本也为 1.7。你能建议一个解决方法吗?
  • 您是否尝试在 $SPARK_HOME$/conf/spark-env.sh 中指定 JAVA_HOME?

标签: java hadoop-yarn spark-streaming


【解决方案1】:

在我们的例子中,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 版本的人,请使用spark.range(0, 100).mapPartitions(_.map(_ => java.lang.System.getProperty("java.version"))).show 进行完整性检查。通过 yarn / spark UI 确定运行时 java 版本可能太难了
  • spark.executorEnv.JAVA_HOMEspark.yarn.appMasterEnv.JAVA_HOME 都需要设置。
【解决方案2】:

尽管您可以强制驱动程序代码在特定的 Java 版本上运行 (export JAVA_HOME=/path/to/jre/ && spark-submit ... ),worker 将使用来自 worker 机器的 yarn 用户 PATH 的默认 Java 版本执行代码。

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

【讨论】:

    【解决方案3】:

    如果你想在 yarn 上设置 spark 的 java 环境,可以在 spark-submit 之前设置

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        需要为 Spark App Master 和将在 YARN 上启动的 Spark Executors 设置 Java 版本。因此 spark-submit 命令必须包含两个 JAVA_HOME 设置:spark.executorEnv.JAVA_HOMEspark.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
        

        【讨论】:

          猜你喜欢
          • 2017-07-02
          • 1970-01-01
          • 1970-01-01
          • 2020-08-22
          • 2017-02-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多