Amazon web services 在AWS EMR群集上使用SparkLauncher时缺少SPARK_主页

Amazon web services 在AWS EMR群集上使用SparkLauncher时缺少SPARK_主页,amazon-web-services,apache-spark,pyspark,emr,amazon-emr,Amazon Web Services,Apache Spark,Pyspark,Emr,Amazon Emr,我正在使用EMR 5.0和Spark 2.0.0。 我正在尝试使用org.apache.spark.launcher.sparkauncher从Scala spark应用程序运行子spark应用程序 我需要使用setSparkHome设置SPARK_HOME: var handle = new SparkLauncher() .setAppResource("s3://my-bucket/python_code.py") .setAppName("PythonAPP")

我正在使用EMR 5.0和Spark 2.0.0。 我正在尝试使用org.apache.spark.launcher.sparkauncher从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中。Spark位于/usr/lib/Spark中。

我发现AWS EMR上的Spark(使用版本EMR-5.23.0和EMR-5.22.0测试)没有在EMR核心节点上安装Spark。只需检查/usr/lib/spark上的EMR节点安装,它并不像安装在EMR主节点上的那样是spark_主页


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

谢谢,但我仍然收到相同的错误:
16/09/18 09:07:02错误应用程序管理员:用户类引发异常:java.io.IOException:无法运行程序/usr/lib/Spark/bin/Spark submit:错误=2,没有这样的文件或目录java.io.IOException:无法运行程序“/usr/lib/spark/bin/spark submit”:错误=2,在org.apache.spark.launcher.sparkauncher.startApplication(sparkauncher.java:428)的java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)中没有这样的文件或目录
您不是在主实例上运行此操作吗?如果安装了Spark,则/usr/lib/Spark肯定存在于主实例上,但在其他模式下不存在。顺便说一句,我还注意到您将Spark主实例设置为spark://...,但这不适用于EMR上的Spark,因为它在纱线上运行。正确的Spark master只是“纱线”“。所以,如果我设置master=纱线,我如何在master上运行它?对不起,我不确定您的确切要求。您正在安装了Spark的群集上运行,但您声称仍然会收到一个错误,说明/usr/lib/Spark/bin/Spark submit不存在,但如果您在主实例上运行该命令,则不是这样。如果该文件不存在,可能是您在错误的实例上运行?我不知道会是什么情况,但你还没有提供足够的信息说明你是如何运行它的。我现在也有同样的问题,但是在EMR核心节点上安装Spark真的是一个解决方案吗?听起来像是一个彻底的黑客。我不知道为什么核心节点没有与主节点相同的Spark设置。我不知道为什么,但它至少能让事情顺利进行。您最好询问AWS EMR支持人员。我还没有在EMR的最新版本上测试过,但是,也许它现在已经修复了。如果我理解正确,这将在EMR集群上运行,但不会使用EMR步骤,对吗?