PySpark

PySparkの実行環境をDockerで用意する方法

PySparkの実行環境をDockerで用意する方法
naoki-hn

Docker を利用して PySpark 実行環境 (Jupyter Notebook) を用意する方法について解説します。

Docker を利用して PySpark 実行環境を用意する

PySpark とは

PySparkは、Apache Spark という分散データ処理フレームワークを Python で利用できる API のことです。Apache Spark や PySpark の概要については「Apache SparkとPySparkの概要」を参考にしてください。

PySpark のベースとなる Spark の環境は分散環境のため、実際に作るのは少し大変です。そのため、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

上記のように表示がされれば PySpark環境の 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 の画面が起動します。

Jupyter Lab (pyspark-notebook)

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()
SparkSessionの作成

Spark セッションを起動後に「http://localhost:4040/」を開くことで以下のようなSpark UI を起動できます。

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 のベースとなる Spark 環境は分散環境のため作るのは少し大変なため、実行環境を用意する際は Docker を用いると簡単です。是非参考にしていただいて PySpark 環境を準備してもらえればと思います。

あわせて読みたい
【Python Tech】プログラミングガイド
【Python Tech】プログラミングガイド
ABOUT ME
ホッシー
ホッシー
システムエンジニア
はじめまして。当サイトをご覧いただきありがとうございます。 私は製造業のメーカーで、DX推進や業務システムの設計・開発・導入を担当しているシステムエンジニアです。これまでに転職も経験しており、以前は大手電機メーカーでシステム開発に携わっていました。

プログラミング言語はこれまでC、C++、JAVA等を扱ってきましたが、最近では特に機械学習等の分析でも注目されているPythonについてとても興味をもって取り組んでいます。これまでの経験をもとに、Pythonに興味を持つ方のお役に立てるような情報を発信していきたいと思います。どうぞよろしくお願いいたします。

※キャラクターデザイン:ゼイルン様
記事URLをコピーしました