雲のメモ帳

猫とクラウドと旅行が好きなインフラエンジニアです。 日々の調べたことや興味が持ったことをこのブログにアウトプットします。

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