Jupyter Notebook は、強力な対話型開発ツールです。このツールを使用すると、Web インターフェイスでコードを記述して実行し、結果をリアルタイムで表示できます。プリコンパイルやスクリプトの個別実行は不要です。このトピックでは、E-MapReduce (EMR) Serverless Spark と効率的に対話するための開発環境を構築する方法について説明します。
背景情報
Apache Livy は、RESTful API を呼び出すことによって Spark と対話します。これにより、Spark とアプリケーションサーバ間の通信が大幅に簡素化されます。Livy API の詳細については、「REST API」をご参照ください。
Jupyter Notebook を使用して開発する場合、次の表に示すメソッドを使用して EMR Serverless Spark と対話できます。ビジネス要件に基づいてメソッドを選択できます。
メソッド | シナリオ |
スタンドアロンの開発環境を迅速に構築したい場合や、異なるマシンで同じ設定を再現する必要がある場合に、このメソッドを選択できます。 | |
Jupyter Notebook の sparkmagic プラグインは、RESTful API を呼び出すことによって Spark と対話します。sparkmagic プラグインは、Livy、Livy Lighter、および Ilum プロトコルをサポートしています。sparkmagic プラグインを構成し、Serverless Spark の Livy API を呼び出して、リモート Spark クラスターと対話するための開発環境を構築できます。 |
前提条件
選択したメソッドに対応する要件が満たされていることを確認してください。
メソッド 1: Docker イメージを使用して環境を迅速に構築および起動する: Docker がインストールされていること。詳細については、「Docker 公式ドキュメント」をご参照ください。
メソッド 2: sparkmagic プラグインを使用して環境を構築および起動する: Jupyter Notebook がインストールされ、起動していること。詳細については、「Project Jupyter | Installing Jupyter」をご参照ください。
この例では、Jupyter Notebook と Python 3.8 を使用します。
ワークスペースが作成されていること。詳細については、「ワークスペースの作成」をご参照ください。
メソッド 1: Docker イメージを使用して環境を迅速に構築および起動する
ステップ 1: ゲートウェイとトークンを作成する
ゲートウェイを作成して起動します。
Gateways ページに移動します。
EMR コンソールにログインします。
左側のナビゲーションバーで、 を選択します。
[Spark] ページで、対象のワークスペースの名前をクリックします。
[EMR Serverless Spark] ページで、左側のナビゲーションウィンドウで をクリックします。
[Livy ゲートウェイ] タブをクリックします。
[Livy ゲートウェイ] ページで、[[Livy] ゲートウェイの作成] をクリックします。
[ゲートウェイの作成] ページで、[名前] (例: Livy-gateway) を入力し、[作成] をクリックします。
ビジネス要件に基づいて他のパラメーターを構成できます。パラメーターの詳細については、「ゲートウェイ管理」をご参照ください。
[Livy ゲートウェイ] ページで、作成したゲートウェイを見つけ、[アクション] 列の [開始] をクリックします。
トークンを作成します。
[ゲートウェイ] ページで、Livy-gateway を見つけ、[アクション] 列の [トークン管理] をクリックします。
[トークンの作成] をクリックします。
[トークンの作成] ダイアログボックスで、[名前] (例: Livy-token) を入力し、[OK] をクリックします。
トークンをコピーします。
重要トークンが作成されたら、すぐにトークンをコピーする必要があります。ページを離れると、トークンは表示できなくなります。トークンが有効期限切れになったり、紛失したりした場合は、トークンをリセットするか、新しいトークンを作成してください。
ステップ 2: Docker を使用してイメージをプルして起動する
次のコマンドを実行してイメージをプルします。
docker pull emr-registry-registry.cn-hangzhou.cr.aliyuncs.com/serverless-spark-public/emr-spark-jupyter:latest次のコマンドを実行してイメージを起動します。
docker run -p <host_port>:8888 emr-registry-registry.cn-hangzhou.cr.aliyuncs.com/serverless-spark-public/emr-spark-jupyter:latest <endpoint> <token>次の表にパラメーターを説明します。
パラメーター
説明
<host_port>ホストのポート。
<endpoint>Livy ゲートウェイのエンドポイント。
[Livy ゲートウェイ] ページで、作成した Livy ゲートウェイの名前をクリックすると、[概要] タブでエンドポイントを表示できます。
<token>ステップ 1 でコピーしたトークン。
イメージが起動すると、次の情報が返されます:
[I 2024-09-23 05:38:14.429 ServerApp] jupyter_lsp | extension was successfully linked. [I 2024-09-23 05:38:14.432 ServerApp] jupyter_server_terminals | extension was successfully linked. [I 2024-09-23 05:38:14.436 ServerApp] jupyterlab | extension was successfully linked. [I 2024-09-23 05:38:14.439 ServerApp] notebook | extension was successfully linked. [I 2024-09-23 05:38:14.439 ServerApp] Writing Jupyter server cookie secret to /root/.local/share/jupyter/runtime/jupyter_cookie_secret [I 2024-09-23 05:38:14.596 ServerApp] notebook_shim | extension was successfully linked. [I 2024-09-23 05:38:14.624 ServerApp] notebook_shim | extension was successfully loaded. [I 2024-09-23 05:38:14.625 ServerApp] jupyter_lsp | extension was successfully loaded. [I 2024-09-23 05:38:14.626 ServerApp] jupyter_server_terminals | extension was successfully loaded. [I 2024-09-23 05:38:14.627 LabApp] JupyterLab extension loaded from /root/miniforge3/envs/livy/lib/python3.8/site-packages/jupyterlab [I 2024-09-23 05:38:14.627 LabApp] JupyterLab application directory is /root/miniforge3/envs/livy/share/jupyter/lab [I 2024-09-23 05:38:14.628 LabApp] Extension Manager is 'pypi'. [I 2024-09-23 05:38:14.637 ServerApp] jupyterlab | extension was successfully loaded. [I 2024-09-23 05:38:14.640 ServerApp] notebook | extension was successfully loaded. [I 2024-09-23 05:38:14.640 ServerApp] Serving notebooks from local directory: /root [I 2024-09-23 05:38:14.640 ServerApp] Jupyter Server 2.14.2 is running at: [I 2024-09-23 05:38:14.640 ServerApp] http://6eca53b95ca2:8888/lab?token=258c0dd75e22a10fb6e2c87ac738c2a7ba6a314c6b****** [I 2024-09-23 05:38:14.640 ServerApp] http://127.0.0.1:8888/lab?token=258c0dd75e22a10fb6e2c87ac738c2a7ba6a314c6b******Jupyter の UI にアクセスします。
返された情報にある
http://127.0.0.1:8888/lab?token=258c0dd75e22a10fb6e2c87ac738c2a7ba6a314c6b******をブラウザのアドレスバーにコピーして、Jupyter を使用して EMR Serverless Spark に接続します。説明リモートサーバーから EMR Serverless Spark に接続している場合は、
127.0.0.1をサーバーの実際の IP アドレスに置き換える必要があります。host_portが8888でない場合は、ポート番号を実際のポート番号に置き換える必要があります。
ステップ 3: 接続性をテストする
JupyterLab ページで、[Notebook] セクションの [PySpark] をクリックします。

次のコマンドを実行して、アクセス可能なすべてのデータベースをクエリします:
spark.sql("show databases").show()次の図に示す出力が返されます。

メソッド 2: sparkmagic プラグインを使用して環境を構築および起動する
ステップ 1: ゲートウェイとトークンを作成する
ゲートウェイを作成して起動します。
Gateways ページに移動します。
EMR コンソールにログインします。
左側のナビゲーションバーで、 を選択します。
[Spark] ページで、対象のワークスペースの名前をクリックします。
[EMR Serverless Spark] ページで、左側のナビゲーションウィンドウで をクリックします。
[Livy ゲートウェイ] タブをクリックします。
[Livy ゲートウェイ] ページで、[[Livy] ゲートウェイの作成] をクリックします。
[ゲートウェイの作成] ページで、[名前] (例: Livy-gateway) を入力し、[作成] をクリックします。
ビジネス要件に基づいて他のパラメーターを構成できます。パラメーターの詳細については、「ゲートウェイ管理」をご参照ください。
[Livy ゲートウェイ] ページで、作成したゲートウェイを見つけ、[アクション] 列の [開始] をクリックします。
トークンを作成します。
[ゲートウェイ] ページで、Livy-gateway を見つけ、[アクション] 列の [トークン管理] をクリックします。
[トークンの作成] をクリックします。
[トークンの作成] ダイアログボックスで、[名前] (例: Livy-token) を入力し、[OK] をクリックします。
トークンをコピーします。
重要トークンが作成されたら、すぐにトークンをコピーする必要があります。ページを離れると、トークンは表示できなくなります。トークンが有効期限切れになったり、紛失したりした場合は、トークンをリセットするか、新しいトークンを作成してください。
ステップ 2: sparkmagic プラグインをインストールして有効にする
次のコマンドを実行して sparkmagic プラグインをインストールします:
pip install sparkmagic使用する Jupyter 環境に基づいて sparkmagic プラグインを有効にします。
Jupyter Notebook を使用する場合は、次のコマンドを実行します:
jupyter nbextension enable --py --sys-prefix widgetsnbextensionJupyterLab を使用する場合は、次のコマンドを実行します:
jupyter labextension install "@jupyter-widgets/jupyterlab-manager"
sparkmagic プラグインの詳細については、「sparkmagic」をご参照ください。
ステップ 3: Spark セッションを構成して起動する
Jupyter の UI にアクセスします。詳細については、「JupyterLab」をご参照ください。
sparkmagic プラグインをインポートします。
%load_ext sparkmagic.magicsセッションの起動構成を変更します。
リソーススケジューリングの遅延によるタイムアウトエラーを防ぐために、起動タイムアウト期間を延長します。
import sparkmagic.utils.configuration as conf conf.override("livy_session_startup_timeout_seconds", 1000)オプション。Spark リソース構成をカスタマイズします。
ttl や conf などのパラメーターを追加できます。詳細については、「Livy Docs - REST API」をご参照ください。
次の構成例は、ドライバーのリソース構成を変更する方法を示しています。
%% spark config { "conf": { "spark.driver.cores": "1", "spark.driver.memory": "7g" } }
セッションを作成します。
ビジネス要件に基づいて、Python または Scala を使用して Jupyter Notebook で Spark セッションを作成します。
%spark add -s <session_name> -l python -u https://<endpoint> -a username -p <token>%spark add -s <session_name> -l scala -u https://<endpoint> -a username -p <token>実際の状況に応じて、次の情報を置き換えることができます。
パラメーター
説明
<session_name>Spark セッションの名前。カスタム名を指定できます。
<endpoint>[パブリックエンドポイント] または [内部エンドポイント] を [概要] タブで取得したものに置き換えます。
内部エンドポイントを使用する場合、Jupyter が実行されているマシンと Livy ゲートウェイが同じリージョンにデプロイされていることを確認し、内部エンドポイントの
https://をhttp://に変更してください。<token>ステップ 1 でコピーしたトークン。
次の図は、Python を使用して Spark セッションを作成したときの出力を示しています。

[State] 列に
idleが表示されるまで 1〜5 分待ちます。これは、セッションが作成され、使用準備が整ったことを示します。セッションの詳細は UI に表示されます。その後、PySpark を使用して対話型開発を行うことができます。EMR Serverless Spark コンソールにログインし、Livy ゲートウェイの [セッション] タブでセッションに関する情報を表示することもできます。セッションを検証します。
セッションを作成した後、
%%sparkを使用してコードを実行できます。たとえば、次のコードを実行して、現在の Spark 環境内のすべてのデータベースを表示します。%%spark spark.sql("show databases").show()次の図に示す出力が返されます。

(オプション) ステップ 4: セッションリソースを解放する
セッションリソースを自動的に解放します。
作成されたセッションが 2 時間アイドル状態の場合、セッションは自動的に終了します。
セッションリソースを手動で解放します。
sparkmagicプラグインを使用してセッションリソースを解放します。%spark delete -s <session_name>EMR Serverless Spark コンソールでセッションリソースを解放します。
Livy ゲートウェイの [セッション] タブで、作成したセッションを見つけ、[アクション] 列の [閉じる] をクリックします。
