Dockerを利用してPySpark実行環境(Jupyter Notebook)を用意する方法について解説します。
Contents
Dockerを利用してPySpark実行環境を用意する
PySparkとは
PySparkは、Apache Sparkという分散データ処理フレームワークをPythonで利用できるようにするAPIのことです。Apache SparkやPySparkの概要については「Apache SparkとPySparkの概要」でまとめていますので興味があれば参考にしてください。
PySparkを学ぶ際など実行環境を用意する際には、Dockerを用いると簡単です。Dockerは、Docker Desktopをインストールするだけで利用できます。
本記事では、PySparkを使用可能なJupyter Notebook環境を作成する方法について紹介します。
PySpark環境構築の方法
以降の説明では、Docker Desktopをインストールしていることを前提とします。インストールがまだの方は「Docker Desktop for Windowsのインストール方法」を参考にしてインストールをしていただければと思います。
PySparkのDockerイメージの取得
Dockerでは、Docker Hubに様々なイメージが公開されています。今回はPySparkが使用できるJupyter Notebook環境を用意可能なpyspark-notebookのイメージを使ってみようと思います。
コマンドプロンプトで以下を実行することで、Dockerイメージを取得することができます。
docker pull jupyter/pyspark-notebook
Dockerイメージの取得が完了すると以下のようになります。
>docker pull jupyter/pyspark-notebook Using default tag: latest latest: Pulling from jupyter/pyspark-notebook 707e32e9fc56: Pulling fs layer 38167cd797bc: Pulling fs layer 9e6b4fdd57ba: Pull complete 4f4fb700ef54: Pull complete f5338aaad745: Pull complete (===== 途中省略 =====) 6ad8cd711331: Pull complete 745ec7749fb3: Pull complete 6d2e31f8fbfc: Pull complete Digest: sha256:194a4664ca4347b4a78f331190d33110a3287976cea678db2d999f21b121782b Status: Downloaded newer image for jupyter/pyspark-notebook:latest docker.io/jupyter/pyspark-notebook:latest What's Next? View a summary of image vulnerabilities and recommendations → docker scout quickview jupyter/pyspark-notebook
取得したDockerイメージ一覧は「docker images」で確認ができます。
>docker images REPOSITORY TAG IMAGE ID CREATED SIZE jupyter/pyspark-notebook latest 068afe4a53e6 3 days ago 4.88GB
上記のように表示がされれば、Dockerイメージの取得は完了です。
コンテナの作成と実行
Jupyter Notebookの起動
Dockerイメージの取得が完了したらコンテナを起動します。コマンドプロンプトで以下のコマンドを実行してください。
docker run --rm -it -p 8888:8888 -p 4040:4040 -v D:\docker\pyspark_notebook_1:/home/jovyan/work jupyter/pyspark-notebook
なお、「D:\docker\pyspark_notebook_1」の部分はお使いの環境の任意フォルダを指定してください。Dockerコマンドの意味については後述しますので一旦動かしてみましょう。
コンテナが起動すると、表示の中に「http://127.0.0.1:8888/lab?token=xxxxxxxxxx」というような記載の文字列が表示されるかと思います。xxxxxxxxxの部分は接続のためのトークンで起動ごとに異なります。
表示されたURLをブラウザに入力して実行してください。Jupyter Labの画面が起動します。
workフォルダをダブルクリックするとworkフォルダに移動できます。workフォルダは「D:\docker\pyspark_notebook_1」にマウントされているため、ここにファイルを保存するとローカルのフォルダにも保存がされます。
Notebookの部分の「Python3」をクリックすると以下のようにNotebookが表示されプログラミングをすることができます。これで、PySpark環境下でのプログラミングを試すことができるようになります。
Spark UIの起動
Sparkは、実行時にdriverやexecutorといったノードが連携して動作します。実行時にどのように処理が分散されたかを確認する際には「Spark UI」で確認することが有効です。ここでは、Spark UIを起動して確認する方法について紹介します。
以下のような任意のPySparkのコードを用意して、SparkSession
を開始してください。
from pyspark.sql import SparkSession # Sparkセッションの作成 spark = SparkSession.builder.appName("Example").getOrCreate()
Sparkセッションを起動後に「http://localhost:4040/」を開くことで以下のようなSpark UIを起動することが可能です。
上記サンプルコードのようにSparkSessionを開始していない状態では、Spark UIへアクセスしても画面は表示されませんので注意して下さい。
Docker起動コマンドの補足説明
ポートの接続 p
Dockerでは、コンテナ側のポートとホストマシン(実行しているPC)のポートを結びつけができます。その際には「-p
」オプションで指定します。Jupyter Notebookは標準で8888番ポートで運用されます。「8888:8888」の部分は、ホスト側(左)の8888番ポートとコンテナ側(右)の8888番ポートを接続するという意味になります。
同じように「4040:4040」の部分については、Spark UIに関するポートの紐づけです。ホスト側(左)の4040番ポートとコンテナ側(右)の4040番ポートを接続しています。
この例では、ホスト側のポートとコンテナ側を同じにしていますが、ホスト側のポートを変更していただいても構いません。
フォルダのマウント v
Dockerでは、コンテナを削除するとデータが消えてしまいます。そのため「-v
」オプションで、ホスト側のフォルダとコンテナ側のディレクトリをマウントしておきます。
今回の例ではホスト側の「D:\docker\pyspark_notebook_1」とコンテナの「/home/jovyan/work」をマウントしています。このようにすることで、workフォルダ内に作成したファイルは「D:\docker\pyspark_notebook_1」配下に保存されます。
他のDockerコンテナと共有して使うようなこともできるので便利です。
コンテナのライフサイクル rm, it
「--rm
」オプションはコンテナが終了した際に自動的にそのコンテナを削除します。これにより、不要なコンテナがシステムに残らないようにします。
「-it
」オプションは、コンテナとのインタラクティブなセッションを開始します。これにより、コンテナ内での操作やデバッグが容易になります。
まとめ
Dockerを利用してPySpark実行環境(Jupyter Notebook)を用意する方法について解説しました。
PySparkは、Apache Sparkという分散データ処理フレームワークをPythonで利用できるようにするAPIのことです。PySparkを使うことで、PythonからApache Sparkの強力な分散処理機能を利用できるようになります。
PySparkを学ぶ際など実行環境を用意する際には、コンテナ環境を用意できるDockerを用いると簡単です。是非参考にしていただいてPySpark環境を準備してもらえればと思います。