Scala + Apache Spark をIntelliJにて開発する方法


  • Scala + Spark でScalable なプロジェクトを開発したいことがあるかと思います。
  • ここでは,Spark のExample に示されているコードを,IntelliJ 上でどのように開発するかをスクリーンショットとともに紹介します。

Apache Spark の準備

Spark のソースコードをダウンロードしてくる

  • git clone git://github.com/apache/spark.git -b branch-1.6
    • これで,Spark の1.6 の安定版がダウンロードされる

Spark をビルドする

maven をインストール

- 例えば,http://qiita.com/chosan211/items/1472198165442e93047e などを参照してインストールする
- 手元のmac環境の場合は,macports を使って下記のように簡単にインストールできた
    - `$sudo port install maven3`
    - `$sudo port select --set maven maven3`
    - `$ mvn --version`
yk-tanigawa$ sudo port install maven3
--->  Computing dependencies for maven3
--->  Dependencies to be installed: maven_select
--->  Fetching archive for maven_select
--->  Attempting to fetch maven_select-0.3_1.darwin_14.noarch.tbz2 from https://packages.macports.org/maven_select
--->  Attempting to fetch maven_select-0.3_1.darwin_14.noarch.tbz2.rmd160 from https://packages.macports.org/maven_select
--->  Installing maven_select @0.3_1
--->  Activating maven_select @0.3_1
--->  Cleaning maven_select
--->  Fetching archive for maven3
--->  Attempting to fetch maven3-3.3.9_0.darwin_14.noarch.tbz2 from https://packages.macports.org/maven3
--->  Attempting to fetch maven3-3.3.9_0.darwin_14.noarch.tbz2.rmd160 from https://packages.macports.org/maven3
--->  Installing maven3 @3.3.9_0
--->  Activating maven3 @3.3.9_0

To make maven 3.3.9 the default, please run
    sudo port select --set maven maven3

--->  Cleaning maven3
--->  Updating database of binaries
--->  Scanning binaries for linking errors
--->  No broken files found.                         

yk-tanigawa$ sudo port select --set maven maven3
Selecting 'maven3' for 'maven' succeeded. 'maven3' is now active.

yk-tanigawa$ mvn --version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T01:41:47+09:00)
Maven home: /opt/local/share/java/maven3
Java version: 1.8.0_91, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.10.5", arch: "x86_64", family: "mac"

Spark をビルドする

  • $ cd spark
  • $ build/mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -DskipTests clean package
  • しばらく時間がかかります。

IntelliJ のセットアップ

ダウンロード & インストール

  • 他のページを見てください
  • scala, sbt plugin を入れ忘れないように

IntelliJ で新しいプロジェクトを作成

  • sbt ベースのプロジェクトを作ります

  • Use auto-import を入れておくと便利です

  • project/src/main/scala にscala class を作ります。

  • Class の名前は http://spark.apache.org/docs/latest/quick-start.html での例に習って,SimpleApp にします

  • Simple App のソースコードを書きます

  • build.sbt に,sparkのLibrary を使うということを追記します

jar ファイルにまとめる

  • IntelliJ のconsole でsbt package コマンドを実行,ソースコードをjar ファイルにまとめます
yk-tanigawa$ sbt package
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=384m; support was removed in 8.0
[info] Loading project definition from /Users/yk-tanigawa/IdeaProjects/scala-spark-example01/project
[info] Set current project to scala-spark-example01 (in build file:/Users/yk-tanigawa/IdeaProjects/scala-spark-example01/)
[info] Updating {file:/Users/yk-tanigawa/IdeaProjects/scala-spark-example01/}scala-spark-example01...
[info] Resolving jline#jline;2.12.1 ...
[info] Done updating.
[info] Compiling 1 Scala source to /Users/yk-tanigawa/IdeaProjects/scala-spark-example01/target/scala-2.11/classes...
[info] Packaging /Users/yk-tanigawa/IdeaProjects/scala-spark-example01/target/scala-2.11/scala-spark-example01_2.11-1.0.jar ...
[info] Done packaging.
[success] Total time: 27 s, completed May 6, 2016 2:20:21 PM

spark–submit を使ってプログラムを実行します

  • 先ほどSpark をインストールしたディレクトリをターミナルで開き,spark-submit コマンドで,先ほど作ったjar ファイルを投げます
  • $ ./bin/spark-submit --class "SimpleApp" --master local[2] ~/IdeaProjects/scala-spark-example01/target/scala-2.11/scala-spark-example01_2.11-1.0.jar

  • 無事に実行されました

    • Lines with a: 58, Lines with b: 26