【问题标题】:Running spark code locally on eclipse with spark installed on remote server在 Eclipse 上本地运行 spark 代码,并在远程服务器上安装 spark
【发布时间】:2018-10-09 05:17:07
【问题描述】:

我已经为 scala 配置了 eclipse 并创建了一个 maven 项目并在 windows 上编写了一个简单的字数统计 spark 作业。现在我的 spark+hadoop 安装在 linux 服务器上。如何将我的 spark 代码从 eclipse 启动到 spark 集群(在 linux 上)?

任何建议。

【问题讨论】:

  • 建议,使用IntelliJIdea,我个人认为是scalajava最好的IDE
  • 是的..但我的问题是如何在集群上运行我的代码。让我们说如果使用 intellijide 那么我该怎么做呢?
  • 你的主人呢?您使用MesosYarn 还是其他?

标签: linux scala debugging apache-spark


【解决方案1】:

其实这个答案并不像你想象的那么简单。

我会做很多假设,首先你使用sbt,第二是你在基于linux的计算机上工作,第三是最后你的项目中有两个classes,比如说RunMeGlobals,最后一个假设是您要在程序内部进行设置。因此,在你的可运行代码的某个地方,你必须有这样的东西:

object RunMe {
  def main(args: Array[String]) {
    val conf = new SparkConf()
      .setMaster("mesos://master:5050") //If you use Mesos, and if your network resolves the hostname master to its IP.
      .setAppName("my-app")
      .set("spark.executor.memory", "10g")
    val sc = new SparkContext(conf)
    val sqlContext = new SQLContext()

    //your code comes here
  }
}

您必须遵循的步骤是:

  • 在项目的根目录中编译项目,使用:

    $ sbt assembly

  • 将作业发送到主节点,这是有趣的部分(假设您的项目中有下一个结构target/scala/,并且里面有一个文件.jar,它对应于编译的项目)

    $ spark-submit --class RunMe target/scala/app.jar

请注意,因为我假设该项目有两个或更多类,所以您必须确定要运行哪个类。此外,我敢打赌YarnMesos 的两种方法都非常相似。

【讨论】:

  • 嗨,如果我没记错,那么我上面的方法我将不得不打包我的代码,并且必须将它传输到服务器然后我可以运行 spark-submit --class RunMe target/scala/app。罐子。但我一直在寻找可以直接从 IDE 运行代码而不是将其传输到服务器的东西。
  • 你不用转移它,当你运行spark-submit它会读取执行类的代码,如果你在SparkConf对象中设置master,它会“发送“job.
  • @AlbertoBonsanto 正如您所说,使用sbt assembly 并使用spark-submit 提交工作,但我可以在IntelliJ IDEA 中使用set JARsright click and run,这两种方式有什么不同?另一个类似的问题here 当我使用sbt assembly 制作一个包然后用spark-submit 提交时,我有别的东西,你能帮我解决它吗?
  • @xring 我一直在寻找类似的东西,发现自己陷入了死胡同,所以我总是使用控制台中的spark-submbit
【解决方案2】:

如果您在 Windows 中开发项目并且希望在 Linux 环境中部署它,那么您可能希望创建一个可执行的 JAR 文件并将其导出到 Linux 的主目录并在您的 spark 脚本中指定相同的内容(在你的终端)。这一切都是可能的,因为 Java 虚拟机的美丽。如果您需要更多帮助,请告诉我。

【讨论】:

    【解决方案3】:

    要实现你想要的,你需要:

    首先:构建 jar(如果你使用 gradle -> fatJar 或 shadowJar)

    第二:在你的代码中,当你生成SparkConf时,你需要指定Master地址,spark.driver.host和相对Jar位置,smth like:

    SparkConf conf = new SparkConf()
    .setMaster("spark://SPARK-MASTER-ADDRESS:7077")
    .set("spark.driver.host", "IP Adress of your local machine")
    .setJars(new String[]{"path\\to\\your\\jar file.jar"})
    .setAppName("APP-NAME");
    

    第三个:只需右键单击并从您的 IDE 运行。就是这样……!

    【讨论】:

      【解决方案4】:

      您正在寻找的是应该创建 SparkContext 的主节点。

      您需要将 master 设置为您要使用的集群。

      我邀请您阅读 Spark 编程指南或参加入门课程以了解这些基本概念。 Spark 不是一个你可以在一夜之间开始工作的工具,它需要一些时间。

      http://spark.apache.org/docs/latest/programming-guide.html#initializing-spark

      【讨论】:

      • 这是一个相当低质量的答案:OP 触及了一个困难而微妙的话题(即使是 spark 贡献者也难以解决)。你的答案是甚至达到火花前 30 分钟教程的水平。发帖前请理解问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-28
      • 1970-01-01
      • 2018-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多