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

时间:2013-09-08 03:17:25

标签: amazon-ec2 apache-spark

我是Spark的新手。我可以从http://spark.incubator.apache.org/docs/0.7.3/ec2-scripts.html启动,管理和关闭Amazon EC2上的Spark群集。

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

包spark.examples

    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))
      }
    }

我创建了一个SimpleJob.scala并添加到我本地spark目录的spark.examples包中。之后我运行命令:         ./spark-ec2 -k -i login

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

2 个答案:

答案 0 :(得分:1)

我建议你先尝试在本地运行它,一旦你实现了这一点,你就会更好地了解所涉及的过程。按照“ Scala中的独立作业 ”部分中的说明here进行操作。然后将脚本复制到远程计算机并使用以下命令运行脚本:

./run spark.examples.SimpleJob

如果您尝试使用以下命令从本地脚本连接到远程spark:

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

最可能的结果是,您将收到连接错误,因为EC2中默认阻止端口7077。

答案 1 :(得分:1)

如果你能够在本地运行,那么很可能问题是Spark工作人员无法访问你的jar。如果以下步骤有效,请告诉我 -

  1. 将您的代码导出到一个jar文件中(我通常使用Eclipse,但您也可以使用sbt)

  2. 在master上运行命令

    SPARK_CLASSPATH=<path/to/jar/file> ./run <Class> [arguements]
    
  3. 例如,

        SPARK_CLASSPATH=Simple.jar ./run spark.examples.SimpleJob
    

    还要确保您的员工在Spark master UI中活着。希望这有帮助!