コンテナを使って、JupyterNotebook + PySparkの開発環境を構築する

これはなに?

JupyterNotebook + PySparkの開発環境をJupyterが提供しているコンテナイメージより構築する。
開発環境はWindows。

実行環境

・Windows10 Pro
・Docker Desktop 2.3.0.4

構築

DockerHubより、JupyterNotebook + PySparkのコンテナイメージをプル

# イメージをプル
docker pull jupyter/pyspark-notebook

#イメージの確認
docker images jupyter/pyspark-notebook

Docker Hub

プルしたイメージより、JupyterNotebook起動

docker run -p 8890:8888 -p 4090:4040 -v C:/Temp/jupyter:/home/jovyan/work jupyter/pyspark-notebook start-notebook.sh

-p 8890:8888 -p 4090:4040

以下のようにコンテナのポートとホストのポートをマッピングしています。ホスト側のポートは自身の環境に合わせて、適宜変更してください。

アプリ ホストポート コンテナポート
JupyterNotebook 8890 8888
SparkUI 4090 4040

-v C:/Temp/jupyter:/home/jovyan/work

コンテナが削除されてもノートブックが消えないように、ホストの C:/Temp/jupyter を /home/jovyan/workにマウントしています。 C:/Temp/jupyter の部分は、任意のローカルのパスを指定してください。

JupyterNotebookへ接続

コンテナ起動時に表示されるトークン情報をコピー

もし、トークン取り忘れた場合でも、コンテナ上で jupyter notebook list コマンドを実行すればトークンを取得できます。

f:id:ykoomaru:20200830092333p:plain

http://localhost:8890にアクセスし、トークンを入力、[Log in]をクリック

ポート番号は、マッピングしたホストポートを指定。

f:id:ykoomaru:20200830092507p:plain

Jupyterのデフォルト画面が表示されることを確認

f:id:ykoomaru:20200830092550p:plain

動作確認

最後にNotebook上でSparkが起動できることを確認します。
Notebookで以下のスクリプトを実行するとSparkを呼び出してテストデータの計算結果が出力されます。

from pyspark.context import SparkContext
sc = SparkContext()
sc

# データの取り込み
testdata = [1, 2, 3, 4, 5]
rdd = sc.parallelize(testdata)

# 合計
rdd.sum()

# 平均
rdd.mean()

f:id:ykoomaru:20200830094956p:plain

[Appendix] Spark UIの起動

Spark実行後に、http://localhost:4090 にアクセスすると、SparkUIにアクセスでき、ジョブのステータスを確認できます。

f:id:ykoomaru:20200830094422p:plain

最後に

Jupyterが予めPysparkが入ったコンテナを提供していてくれたため、簡単に開発環境を構築することができました。簡単な処理や動作の確認であれば、この環境で検証することができますね。