最近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
しても大丈夫です。
3. Reimport Maven Projects
Apache Spark
の依存管理はmaven
で行われています。
開いたら何はともあれmaven
プロジェクトの設定インポートを行いましょう。
初めて開いた時にはMaven project need to be imported
というダイアログが表示されるのでImport Changes
をたっぷタップすればOKです。
初めて開いたのではない場合は明示的に再インポートします。
4. 依存ライブラリのscope
を変更する
正直、ここが一番面倒なステップです モジュールの依存管理を開き、
scope
がprovided
もしくはruntime
になっているライブラリをcompile
に変更します。
※ デバッグしたいモジュールとそれの関連モジュール。
(pom.xml
のscope
を置換してからMaven Projects
でReimport
した方が楽かもしれません )
5. paradiseをコンパイルオプションに追加する
Apache Spark
ではscalaマクロ
を使っているのでコンパイル・オプションにパラダイスの指定が必要です。
IntelliJの設定からScala Compiler
> Additional compiler options
にparadise
のパスを指定してあげましょう。
# /Users/ユーザ名/.m2の部分はmavenホームです
-Xplugin:/Users/ユーザ名/.m2/repository/org/scalamacros/paradise_2.10.4/2.0.1/paradise_2.10.4-2.0.1.jar
6. avroファイルからクラスファイルを生成する
spark-streaming-flume-isnk
モジュールにavro
フォーマットのファイルが入っているのでこれをコンパイルしてクラスファイルを生成します。
ごちゃごちゃ言ってますがやり方はかんたんで、Maven Projects
からplugins
> avro:protocol
を実行するだけです。
これでsparkflume.avdl
がコンパイルされてクラスファイルが生成されます。
7. 生成したavroのクラスファイルをソース・パスに追加する
maven
プラグインで生成したavroクラスファイルは
spark/external/flume-sink/target/scala-2.10/src_managed/main/compiled_avro
に生成されるので、このディレクトリをソース・パスに追加します。
以上で準備はおしまいです
一旦ここでリビルドしてみましょう。
8. デバッグ実行する
あとはexamples
モジュールから適当なオブジェクトを選択してデバッグ実行(^↑F9)するなり、test
ソースから適当なクラスを選択してデバッグ実行すればOKです