LoginSignup
28
25

More than 5 years have passed since last update.

Apache SparkのソースファイルをIntelliJでデバッグする

Posted at

最近Apache Sparkのissueを見て修正できそうなものはコントリビュートしているのですが、そこで欠かせないのがデバッグIDEです。

私は普段IntteliJでscalaを書いているのでIntteliJでデバッグしようと思ったのですが、これがなかなか一筋縄ではいかなかったので共有することにしました。

1. Apache Sparkのソースコードを取得する

まずはGitHubから最新のソースコードを取得します。

git clone git@github.com:apache/spark.git

2. IntelliJでSparkを開く

次に、取得したソースコードをIntelliJで開きます。
※ 1.を飛ばしてIntelliJからgit cloneしても大丈夫です。

open_intellij.png

3. Reimport Maven Projects

Apache Sparkの依存管理はmavenで行われています。
開いたら何はともあれmavenプロジェクトの設定インポートを行いましょう。
初めて開いた時にはMaven project need to be importedというダイアログが表示されるのでImport ChangesをたっぷタップすればOKです。

import_maven_projects.png

初めて開いたのではない場合は明示的に再インポートします。

reimport_maven.png

4. 依存ライブラリのscopeを変更する

正直、ここが一番面倒なステップです :cold_sweat: モジュールの依存管理を開き、scopeprovidedもしくはruntimeになっているライブラリをcompileに変更します。
※ デバッグしたいモジュールとそれの関連モジュール。

scope.png

pom.xmlscopeを置換してからMaven ProjectsReimportした方が楽かもしれません :sweat_drops:

5. paradiseをコンパイルオプションに追加する

Apache Sparkではscalaマクロを使っているのでコンパイル・オプションにパラダイスの指定が必要です。
IntelliJの設定からScala Compiler > Additional compiler optionsparadiseのパスを指定してあげましょう。

# /Users/ユーザ名/.m2の部分はmavenホームです
-Xplugin:/Users/ユーザ名/.m2/repository/org/scalamacros/paradise_2.10.4/2.0.1/paradise_2.10.4-2.0.1.jar

paradise.png

6. avroファイルからクラスファイルを生成する

spark-streaming-flume-isnkモジュールにavroフォーマットのファイルが入っているのでこれをコンパイルしてクラスファイルを生成します。
ごちゃごちゃ言ってますがやり方はかんたんで、Maven Projectsからplugins > avro:protocolを実行するだけです。

avro.png

これでsparkflume.avdlがコンパイルされてクラスファイルが生成されます。

7. 生成したavroのクラスファイルをソース・パスに追加する

mavenプラグインで生成したavroクラスファイルは

spark/external/flume-sink/target/scala-2.10/src_managed/main/compiled_avro

に生成されるので、このディレクトリをソース・パスに追加します。

flume-sink.png

以上で準備はおしまいです :relaxed:
一旦ここでリビルドしてみましょう。

8. デバッグ実行する

あとはexamplesモジュールから適当なオブジェクトを選択してデバッグ実行(^↑F9)するなり、testソースから適当なクラスを選択してデバッグ実行すればOKです :ok_woman:

debug.png

28
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
25