やりたいこと
Windows上に入れたSparkとJupyter Nootbookで開発していたら、Windowsのディレクトリ構成やファイル操作とかにイライラとしてLinuxで開発したくなりました。
でも、せっかくWindowsに戻ってこられたところなので、何とかデュアルブートのLinuxに戻りたくはないと考え、WSL上のSparkをJupyterでリモート操作できる環境を整えました。
利用リポジトリ
AWS Glueを使っていても、よく目にするこの2つのリポジトリを使います。
Apache Livy
REST経由でSparkクラスタを操作できるサービス
Sparkmagic
Livyを通してリモートのSparkクラスタをJupyter notebookから操作するツール
使い方はここがわかりやすいです。
sparkmagic/Spark Kernel.ipynb at master · jupyter-incubator/sparkmagic · GitHub
WSLでSparkをダウンロード
Sparkの2.1.0をダウンロードして展開しておきます。どうも2.1.0でないとSparkmagicとLivyの通信が動かないようです。
$ wget https://archive.apache.org/dist/spark/spark-2.1.0/spark-2.1.0-bin-hadoop2.7.tgz $ tar xf spark-2.1.0-bin-hadoop2.7.tgz
最新のタグでもDockerfile見る限りは、Spark 2.1.0のLivy v0.3.0でテストされているようです。
https://github.com/jupyter-incubator/sparkmagic/blob/0.12.6/Dockerfile.spark
確かにそれ以降のLivyだと以下のようなSASLのネゴシエーションエラーが出て動かない。解決まではいけなそうなので、このまま使うことにしました。
18/12/04 11:49:56 ERROR RSCClient: RPC error. javax.security.sasl.SaslException: Client closed before SASL negotiation finished.
WSLでLivyインストール&ビルド
LivyのビルドにはJavaの1.7か1,.8が必要なので、別のバージョン使っている場合は切り替え。
$ sudo update-alternatives --config java
上に書いたように最新のソースはエラーが出て繋げなかったので、Sparkmagicから動くv0.3.0をチェックアウトしてビルドします。
かなり時間かかります。
$ git clone git@github.com:cloudera/livy.git $ cd livy/ $ git checkout -f v0.3.0 $ mvn -Dspark.version=2.1.0 -DskipTests package
ビルドが完了したら、ログ出力用のディレクトリを作ってLivyを起動しておきます。
$ mkdir logs $ SPARK_HOME=/home/yomon8/lib/spark-2.4.0-bin-hadoop2.7 ./bin/livy-server
この際に、Sparkmagicを動かすコンピュータから接続確認しておきます。
$ curl http://localhost:8998/sessions {"from":0,"total":0,"sessions":[]}
Sparkmagic
Sparkmagicのセットアップです。本体のWindowsで行いました。READMEに沿って行えば特に迷うところはありません。
> pip install sparkmagic > jupyter nbextension enable --py --sys-prefix widgetsnbextension
> pip show jupyter #---省略 Location: c:\python27\lib\site-packages #---省略 > cd c:\python27\lib\site-packages # Locationへ移動 # 必要なKernelをインストール > jupyter-kernelspec install sparkmagic/kernels/sparkkernel > jupyter-kernelspec install sparkmagic/kernels/pysparkkernel > jupyter-kernelspec install sparkmagic/kernels/pyspark3kernel > jupyter-kernelspec install sparkmagic/kernels/sparkrkernel
Jupyter notebookを起動して、インストールされたカーネルがJupyterから利用できるようになっていることを確認します。
> jupyter notebook
これで、WSL側のSparkをWindows側から使えます。
他のSparkのバージョン
SASLのネゴシエーションで失敗してしまって繋がらないです・・ いつか方法わかったら追記します。
参考URL
JupyterからSpark clusterを操作できるlivy + sparkmagicを試してみた - once upon a time,