在 AWS EMR 集群上使用 SparkLauncher 时缺少 SPARK_HOME

Missing SPARK_HOME when using SparkLauncher on AWS EMR cluster

我正在使用 EMR 5.0 和 Spark 2.0.0。 我正在尝试使用 org.apache.spark.launcher.SparkLauncher

从 Scala spark 应用程序 运行 子 spark 应用程序

我需要使用 setSparkHome 设置 SPARK_HOME:

 var handle = new SparkLauncher()
    .setAppResource("s3://my-bucket/python_code.py")
    .setAppName("PythonAPP")
    .setMaster("spark://" + sparkSession.conf.get("spark.driver.host") +":"+ sparkSession.conf.get("spark.driver.port"))
    .setVerbose(true)
    .setConf(SparkLauncher.EXECUTOR_CORES, "1")
    .setSparkHome("/srv/spark") // not working
    .setDeployMode("client")
    .startApplication(
      new SparkAppHandle.Listener() {

        override def infoChanged(hndl: SparkAppHandle): Unit = {
          System.out.println(hndl.getState() + " new  state !")
        }

        override def stateChanged(hndl: SparkAppHandle): Unit = {
          System.out.println(hndl.getState() + "    new  state !")
        }
      })

在哪里可以找到我的 Spark 主页的适当路径? 该集群由 1 个主服务器、1 个核心服务器和 1 个任务服务器构建。

谢谢!

从 emr-4.0.0 开始,EMR 上的所有应用程序都在 /usr/lib 中。火花在 /usr/lib/spark.

我发现 AWS EMR 上的 Spark(使用版本 emr-5.23.0 和 emr-5.22.0 测试)没有在 EMR 核心节点上安装 Spark。只需检查 /usr/lib/spark 上的 EMR 节点安装,它与安装在 EMR MASTER 节点上的 SPARK_HOME 并不完全相同。

在 EMR CORE 节点上安装 Spark 解决了我的问题。