从Eclipse运行Spark应用程序

时间:2015-03-28 18:54:04

标签: eclipse scala apache-spark scala-ide

我正在尝试在Eclipse上开发一个spark应用程序,然后逐步调试它。

我下载了Spark源代码,并在Eclipse中添加了一些spark子项目(例如spark-core)。现在,我正在尝试使用Eclipse开发一个spark应用程序。我已经在Eclipse上安装了ScalaIDE。我基于Spark网站提供的示例创建了一个简单的应用程序。

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf

object SimpleApp {
  def main(args: Array[String]) {
    val logFile = "YOUR_SPARK_HOME/README.md" // Should be some file on your system
    val conf = new SparkConf().setAppName("Simple Application")
    val sc = new SparkContext(conf)
    val logData = sc.textFile(logFile, 2).cache()
    val numAs = logData.filter(line => line.contains("a")).count()
    val numBs = logData.filter(line => line.contains("b")).count()
    println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
  }
}

在我的项目中,我将spark-core项目添加为依赖项目(右键单击 - >构建路径 - >添加项目)。现在,我正在尝试构建我的应用程序并运行它。但是,我的项目显示它有错误,但我没有看到Eclipse中问题视图中列出的任何错误,也没有看到任何以红色突出显示的行。所以,我不确定问题是什么。我的假设是我需要在我的项目中添加外部罐子,但我不确定这些罐子会是什么。该错误是由val conf = new SparkConf().setAppName("Simple Application")和后续行引起的。我尝试删除这些行,错误消失了。非常感谢任何帮助和指导,谢谢!

4 个答案:

答案 0 :(得分:3)

您似乎没有使用任何软件包/库管理器(例如sbt,maven),这应该可以消除任何版本问题。 设置正确版本的java,scala,spark及其所有后续依赖项可能具有挑战性。 我强烈建议将您的项目更改为Maven Convert Existing Eclipse Project to Maven Project

就个人而言,我在IntelliJ IDEA(https://confluence.jetbrains.com/display/IntelliJIDEA/Getting+Started+with+SBT)上有很好的经验,易于设置和维护。

答案 1 :(得分:3)

我前几天刚为Spark创建了一个Maven原型 它在Eclipse / Idea中使用 Scala 2.10.4 设置了一个新的 Spark 1.3.0 项目。

只需按照说明here

您必须在生成项目后更改Scala版本:
右键单击生成的项目并选择:
Scala > Set the Scala Installation > Fixed 2.10.5.(bundled)

ScalaIDE (当前2.11.6)附带的默认版本会在 ScalaIDE 中检测到scala-maven-plugin时自动添加到项目中POM。

如果有人知道如何从Maven设置 Scala库容器 版本,我会感激您的反馈,同时它会引导一个新项目。 ScalaIDE 在哪里查找Scala版本(如果有的话)?

BTW只需确保在调试器中使用Spark代码之前下载源代码(Project right-click > Maven > Download sources)。

如果你想使用(恕我直言)最好的Eclipse好东西(引用,类型层次结构,调用层次结构),你必须自己构建Spark,以便所有源都在你的构建路径上(如Maven Scala依赖关系不是由 EclipseIDE / JDT 处理的,即使它们当然是在构建路径上。)

有趣的调试,我可以告诉你,它帮助我深入了解Spark并真正了解它是如何工作的。)

答案 2 :(得分:1)

您可以尝试添加spark-assembly.jar

正如其他人所说,更好的方法是使用Sbt(或Maven)来管理您的依赖项。 spark-core本身有许多依赖项,只添加一个jar就不够了。

答案 3 :(得分:0)

您尚未在spark代码中指定主控。因为您在本地计算机上运行它。替换以下行

val conf = new SparkConf().setAppName("Simple Application")

val conf = new SparkConf().setAppName("Simple Application").setMaster("local[2]")

这里“local [2]”表示将使用2个线程。