【问题标题】:Not able to add spark job on EC2 cluster无法在 EC2 集群上添加 Spark 作业
【发布时间】:2022-01-03 23:48:34
【问题描述】:

我是 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 集群上添加和运行这个作业。

【问题讨论】:

    标签: amazon-ec2 apache-spark


    【解决方案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。

    【讨论】:

    • 感谢您的回复。我可以在本地运行它。我遵循了这里提到的所有说明:spark.incubator.apache.org/docs/latest/quick-start.htmlspark.incubator.apache.org/docs/latest/quick-start.html
    • 我可以在 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: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered13/09/09 15:11:46 WARN cluster.ClusterScheduler: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered
    • 当我在浏览器上点击 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 上下文的“主”字段中添加了这个 url。之后,我进入本地机器上的 spark 目录并运行 sbt/sbt 包。然后我跑了: :~/spark$ MASTER=spark://ec2-174-129-181-44.compute-1.amazonaws.com:7077 ./run spark.examples.SimpleJob
    【解决方案2】:

    如果您能够在本地运行,那么问题很可能是 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 中还活着。希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2020-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-04
      • 1970-01-01
      • 2015-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多