1

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

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

package 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 <keypair> -i <key-file> login <cluster-name>

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

4

2 回答 2

1

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

./run spark.examples.SimpleJob

如果您尝试从本地脚本连接到远程火花:

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

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

于 2013-09-09T08:38:38.743 回答
1

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

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

  2. 在 master 上运行命令

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

例如,

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

还要确保您的工作人员在 Spark 主 UI 中还活着。希望这可以帮助!

于 2013-09-28T03:35:54.443 回答