Amazon ec2 无法在EC2群集上添加spark作业

Amazon ec2 无法在EC2群集上添加spark作业,amazon-ec2,apache-spark,Amazon Ec2,Apache Spark,我是新手。我能够从启动、管理和关闭Amazon EC2上的Spark群集 但我无法在集群上添加以下作业 软件包示例 import spark.SparkContext import SparkContext._ object SimpleJob { def main(args: Array[String]) { val logFile = "< Amazon S3 file url>" val sc = new

我是新手。我能够从启动、管理和关闭Amazon EC2上的Spark群集

但我无法在集群上添加以下作业

软件包示例

    import spark.SparkContext
    import SparkContext._

    object SimpleJob {
        def main(args: Array[String]) {
        val logFile = "< Amazon S3 file url>"
        val sc = new SparkContext("spark://<Host Name>:7077", "Simple Job",
          System.getenv("SPARK_HOME"), Seq("<Jar Address>"))
        val logData = sc.textFile(logFile)
        val numsa = logData.filter(line => line.contains("a")).count
        val numsb = logData.filter(line => line.contains("b")).count
        println("total a : %s, total b : %s".format(numsa, numsb))
      }
    }
import spark.SparkContext
导入SparkContext_
对象SimpleJob{
def main(参数:数组[字符串]){
val logFile=“”
val sc=新的SparkContext(“spark://:7077”,“简单作业”,
System.getenv(“SPARK_HOME”),序号(“”)
val logData=sc.textFile(日志文件)
val numsa=logData.filter(line=>line.contains(“a”)).count
val numsb=logData.filter(line=>line.contains(“b”)).count
println(“总计a:%s,总计b:%s”。格式(numsa,numsb))
}
}
我已经创建了一个SimpleJob.scala,并在我的本地spark目录中添加了spark.examples包。之后,我运行命令: ./spark-ec2-k-i登录

群集已启动,我可以登录群集。
但我不知道如何在EC2集群上添加和运行此作业。

我建议您首先尝试在本地运行它,一旦实现了这一点,您将对所涉及的流程有更好的了解。按照“Scala中的独立作业”一节中的说明操作。然后将脚本复制到远程计算机,并使用以下命令从那里运行脚本:

./run spark.examples.SimpleJob
如果您试图通过以下方式从本地脚本连接到远程spark:

MASTER=spark://ec2-174-129-181-44.compute-1.amazonaws.com:7077 ./run spark.examples.SimpleJob

最有可能的结果是,您将得到一个连接错误,因为在EC2中默认情况下端口7077被阻塞

如果您能够在本地运行,那么问题很可能是Spark workers无法访问您的jar。让我知道以下步骤是否有效-

  • 将代码导出到jar文件中(我通常使用Eclipse,但也可以使用sbt)

  • 在master上运行该命令

    SPARK_CLASSPATH=<path/to/jar/file> ./run <Class> [arguements]
    

    还要确保您的工作人员在Spark master UI中处于活动状态。希望这有帮助

    谢谢你的回复。我可以在本地运行它。我遵循了这里提到的所有说明:我能够在Amazon-ec2上启动集群。但是当我转到我的spark目录并运行:
    MASTER=spark://ec2-174-129-181-44.compute-1.amazonaws.com:7077 ./run spark.examples.SimpleJob
    我在控制台上收到以下消息:
    13/09/09 15:11:31 WARN cluster.ClusterScheduler:初始作业未接受任何资源;检查您的群集UI以确保工作人员已注册
    13/09/09 15:11:46警告群集。群集调度器:初始作业未接受任何资源;检查您的群集UI以确保已注册工人
    当我在浏览器上点击ec2-174-129-181-44.compute-1.amazonaws.com:8080时,我可以看到一个工人而没有运行的应用程序。如果我遗漏了什么,请告诉我。您是在远程计算机还是本地计算机上从shell运行./run命令?你有没有其他可以使用这些资源的spark shell?启动集群后,我在控制台底部得到了spark master url。假设url是spark://ec2-174-129-181-44.compute-1.amazonaws.com:7077. 我在SimpleJob.scala的spark上下文的“master”字段中添加了这个url。之后,我转到本地机器上的spark目录并运行sbt/sbt包。然后我跑::~/spark$MASTER=spark://ec2-174-129-181-44.compute-1.amazonaws.com:7077 /运行spark.examples.SimpleJob
        SPARK_CLASSPATH=Simple.jar ./run spark.examples.SimpleJob