使用Eclipse编写Spark应用程序(Scala+SBT)

大数据技术原理与应用

【版权声明】博客内容由厦门大学数据库实验室拥有版权,未经允许,请勿转载!
[返回Spark教程首页]

之前有篇博客介绍了使用Eclipse编写Spark应用程序,采用的是maven工具。今天这篇博客同样是使用Eclipse编写Spark应用程序,但是使用的是sbt工具。下面开始我们的教程。

运行环境

  1. Ubuntu 16.04
  2. Scala 2.11.8
  3. Spark 2.1.0
  4. sbt 0.13.11 (可以通过/usr/local/sbt/sbt sbtVersion查看)
  5. Scala IDE for eclipse

笔者假设读者已经安装好Scala以及spark框架(Scala的安装可以参考http://dblab.xmu.edu.cn/blog/929-2/, Spark的安装可以参考http://dblab.xmu.edu.cn/blog/1307-2/)。接下来看下如何在Ubuntu上安装Scala IDE for eclipse。首先进入ScalaIDE官网下载eclipse,版本为Linux-64 bit。然后将eclipse安装在/usr/local目录下,并测试运行eclipse

sudo tar -zxvf ~/下载/scala-SDK-4.5.0-vfinal-2.11-linux.gtk.x86_64.tar.gz -C /usr/local
cd /usr/local
./eclipse/eclipse

如果eclipse成功开启,则表示Scala IDE for eclipse安装成功。

sbteclipse插件安装

笔者假设读者已经安装好上述环境平台,接下来需要先安装sbteclipse插件,该插件是用于创建Eclipse应用程序,且该插件可以让Eclipse使用sbt打包编译spark程序。sbteclipse插件有两种安装形式,第一种是局部安装,即用于某个具体应用程序,另一种是全局安装,即应用于所有的应用程序。这里都介绍下。

sbteclipse局部安装

如果是局部安装,则需要在当前应用程序文件下的project目录创建plugins.sbt文件,例如/home/hadoop/workspace/wordcount/project/plugins.sbt,并且在文件中输入如下语句

addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "4.0.0")

该语句表示安装sbteclipse插件,版本为4.0.0。等后续运行/usr/local/sbt/sbt eclipse命令时会自动安装插件。

sbteclipse全局安装

本教程使用的是全局安装,因为这样可以避免每个程序都需要安装一次插件。如果是全局安装,则需要创建目录~/.sbt/0.13/plugins,并在该目录下创建文件build.sbt,并在build.sbt输入上述addSbtPlugin语句,具体操作如下:

mkdir -p ~/.sbt/0.13/plugins
vim ~/.sbt.0.13/plugins/build.sbt
# 在build.sbt文件输入
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "4.0.0")

执行了上述步骤之后,执行如下命令即可安装插件sbteclipse

/usr/local/sbt/sbt

安装成功之后,终端输出如下所示:

OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=256M; support was removed in 8.0
[info] Loading global plugins from /home/hadoop/.sbt/0.13/plugins
[info] Updating {file:/home/hadoop/.sbt/0.13/plugins/}global-plugins...
[info] Resolving org.scala-sbt.ivy#ivy;2.3.0-sbt-2cc8d2761242b072cedb0a04cb39435[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] downloading https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/com.typesafe.sbteclipse/sbteclipse-plugin/scala_2.10/sbt_0.13/4.0.0/jars/sbteclipse-plugin.jar ...
[info]  [SUCCESSFUL ] com.typesafe.sbteclipse#sbteclipse-plugin;4.0.0!sbteclipse-plugin.jar (9441ms)
[info] downloading https://repo1.maven.org/maven2/org/scalaz/scalaz-core_2.10/7.1.0/scalaz-core_2.10-7.1.0.jar ...
[info]  [SUCCESSFUL ] org.scalaz#scalaz-core_2.10;7.1.0!scalaz-core_2.10.jar(bundle) (11023ms)
[info] downloading https://repo1.maven.org/maven2/org/scalaz/scalaz-effect_2.10/7.1.0/scalaz-effect_2.10-7.1.0.jar ...
[info]  [SUCCESSFUL ] org.scalaz#scalaz-effect_2.10;7.1.0!scalaz-effect_2.10.jar(bundle) (957ms)
[info] Done updating.
[info] Set current project to sbt (in build file:/usr/local/sbt/)
> exit

最后的exit是用于退出sbt客客户端。

创建eclipse应用程序

插件安装成功之后,即可以开始创建应用程序。在Scala IDE for eclipse工作目录下(本人工作目录为/home/hadoop/workspace)创建工作目录wordcount

cd /home/hadoop/workspace
mkdir wordcount

然后进入wordcount目录,创建如下所示的目录结构:

├── src
│  ├── main
│  │  ├── scala
├── build.sbt
├── project
│  ├── build.properties

其中src/main/scala放编写的spark应用程序,build.sbt文件即sbt打包配置信息,project/build.properties文件为程序配置信息。在build.sbt输入如下内容:

name := "Simple Project"
version := "1.0"
scalaVersion := "2.11.8"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.1.0"

然后在project/build.properties输入sbt版本信息,如下:

sbt.version=0.13.11

上述操作都完成之后,在程序主目录(/home/hadoop/workspace/wordcount)输入如下命令创建eclipse应用程序:

 /usr/local/sbt/sbt eclipse

等上述命令执行结束之后,可以看到成功创建Eclipse应用程序信息如下:

.....省略一些信息
[info] Done updating.
[info] Successfully created Eclipse project files for project(s):
[info] Simple Project

ok,创建好上述应用程序之后,我们就可以打开eclipse,导入这个刚创建的应用程序。具体操作为File->Import->Existing Projects into Workspace导入之前创建的工程即可。

导入工程之后,在src/main/scala目录下创建工程文件WordCount.scala,这里文件类型为Scala Object。输入如下代码:

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

object WordCount {
    def main(args: Array[String]) {
        val inputFile =  "file:///usr/local/spark/word.txt"
        val conf = new SparkConf().setAppName("WordCount").setMaster("local[2]")
        val sc = new SparkContext(conf)
                val textFile = sc.textFile(inputFile)
                val wordCount = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)
                wordCount.foreach(println)       
    }
}

最后点击运行按钮,Run As->Scala Application。即可在Console看到如下输出:

(hello,2)
(spark,2)
(world,1)
(hadoop,1)
(nice,1)

至此,使用Eclipse编写Spark应用程序(采用Scala语言,sbt工具)教程编写完成。

子雨大数据之Spark入门
扫一扫访问本博客