コマンドラインでのビルド
$ git clone --branch v3.3.0 --depth 1 https://github.com/apache/spark.git
asdf で Java 8 をインストールする。
$ brew install asdf
$ echo -e "\n. $(brew --prefix asdf)/libexec/asdf.sh" >> ${ZDOTDIR:-~}/.zshrc
$ asdf --version
v0.10.2
$ asdf plugin-add java
$ asdf list-all java
$ asdf install java corretto-8.342.07.3
$ asdf global java corretto-8.342.07.3
$ echo ". ~/.asdf/plugins/java/set-java-home.zsh" >> ~/.zprofile
$ java -version
openjdk version "1.8.0_342"
OpenJDK Runtime Environment Corretto-8.342.07.3 (build 1.8.0_342-b07)
OpenJDK 64-Bit Server VM Corretto-8.342.07.3 (build 25.342-b07, mixed mode)
ビルドが通ることを確認する。
$ export MAVEN_OPTS="-Xss64m -Xmx2g -XX:ReservedCodeCacheSize=1g"
$ ./build/mvn -DskipTests clean package
IntelliJでのビルド
New > Project from Existing Sources から Maven Project として開き、 JDKは ~/.asdf/installs/java/ 内にあるので Command + Shift + . で隠しディレクトリを表示して選択する。 そして Maven window から Generate Sources and Update Folders For All Projects を実行すると Build Project できるようになる。
リモートデバッグ
Listen to remote JVM でデバッグを開始し、spark.driver.extraJavaOptions に次のようなオプションを渡すとブレークポイントで止めることができる。
JDWPを有効にしてリモートマシンで動いているJavaアプリケーションをデバッグする - sambaiz-net
$ ./bin/spark-shell --conf "spark.driver.extraJavaOptions=-agentlib:jdwp=transport=dt_socket,server=n,suspend=n,address=localhost:5005"
scala> spark.sql("select 1+1").collect()
sbt では次のようにしてオプションを渡すことができる。
$ ./build/sbt
sbt:spark-parent> project core
sbt:spark-core> set javaOptions in Test += "-agentlib:jdwp=transport=dt_socket,server=n,suspend=n,address=localhost:5005"
sbt:spark-core> testOnly *SparkContextSuite -- -t "Only one SparkContext may be active at a time"