これはなに?
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
プルしたイメージより、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 コマンドを実行すればトークンを取得できます。
http://localhost:8890にアクセスし、トークンを入力、[Log in]をクリック
ポート番号は、マッピングしたホストポートを指定。
Jupyterのデフォルト画面が表示されることを確認
動作確認
最後に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()
[Appendix] Spark UIの起動
Spark実行後に、http://localhost:4090 にアクセスすると、SparkUIにアクセスでき、ジョブのステータスを確認できます。
最後に
Jupyterが予めPysparkが入ったコンテナを提供していてくれたため、簡単に開発環境を構築することができました。簡単な処理や動作の確認であれば、この環境で検証することができますね。