Jupyter Notebook は、Web インターフェイスからコードを記述・実行し、事前にコンパイルしたり、別のスクリプトを実行したりすることなく、結果を即座に確認できる強力なインタラクティブ開発ツールです。このトピックでは、EMR Serverless Spark と対話するための効率的な開発環境を構築する方法について説明します。
背景情報
Apache Livy は、REST API を使用して Spark と対話し、Spark とアプリケーションサーバー間の通信を簡素化します。Livy API の詳細については、「REST API」をご参照ください。
Jupyter Notebook で EMR Serverless Spark と対話するには、sparkmagic プラグインまたは Docker イメージを使用します。ニーズに最も適した方法を選択してください。
|
方法 |
ユースケース |
|
自己完結型の開発環境を迅速にセットアップしたり、複数のマシンで同じセットアップを複製したりするには、Docker イメージを使用します。 |
|
|
Jupyter Notebook 用の sparkmagic プラグインは、REST API を介して Spark と対話します。現在、sparkmagic は Livy、Livy Lighter、Ilum プロトコルをサポートしています。Jupyter Notebook で sparkmagic プラグインを設定し、EMR Serverless Spark の Livy API を使用して、リモート Spark クラスターと対話するための効率的な開発環境を構築します。 |
前提条件
-
選択した方法に応じて、前提条件を満たします。
-
方法1:Docker イメージを使用した環境のクイックスタート:Docker がインストールされていること。詳細については、「Docker 公式ドキュメント」をご参照ください。
-
方法2:sparkmagic プラグインを使用した環境の起動:Jupyter Notebook がインストールされ、実行中であること。詳細については、「Project Jupyter | Jupyter のインストール」をご参照ください。
このトピックの例では、Python 3.8 を搭載した Jupyter Notebook を使用します。
-
-
ワークスペースが作成されていること。詳細については、「ワークスペースの作成」をご参照ください。
方法1:Docker イメージの使用
ステップ1:ゲートウェイとアクセストークンの作成
-
ゲートウェイを作成して起動します。
-
ゲートウェイページに移動します。
-
EMR コンソールにログインします。
-
左側のナビゲーションウィンドウで、EMR Serverless > Spark を選択します。
-
Spark ページで、対象のワークスペース名をクリックします。
-
EMR Serverless Spark ページで、左側のナビゲーションウィンドウの をクリックします。
-
-
Livy Gateway タブをクリックします。
-
Livy Gateway ページで、Livy ゲートウェイの作成 をクリックします。
-
[ゲートウェイの作成] ページで、Name (例:
Livy-gateway) を入力し、create をクリックします。要件に応じて他のパラメーターを調整できます。詳細については、「ゲートウェイの管理」をご参照ください。
-
Livy Gateway ページで、作成したゲートウェイを見つけ、[操作] 列の START をクリックします。
-
-
トークンを作成します。
-
Gateway ページで、
Livy-gatewayを見つけ、[操作] 列の Token Management をクリックします。 -
Create Token をクリックします。
-
Create Token ダイアログボックスで、Name (例:
Livy-token) を入力し、OK をクリックします。 -
トークン情報をコピーします。
重要トークンは作成後すぐにコピーする必要があります。後でトークン情報を表示することはできません。トークンの有効期限が切れたり、紛失したりした場合は、新しいトークンを作成するか、リセットしてください。
-
ステップ2:Docker イメージのプルと起動
-
次のコマンドを実行して 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 Gateway ページで、作成した Livy ゲートウェイの名前をクリックします。Overview タブでエンドポイントを確認できます。
<token>このプレースホルダーを前のステップでコピーしたトークンに置き換えます。
イメージが起動すると、次のような出力が表示されます。
[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******URL をコピーして、ブラウザで開きます。これで、Jupyter サービスを使用して EMR Serverless Spark に接続できます。説明-
リモートサーバーを使用して接続する場合、IP アドレス
127.0.0.1をサーバーの実際の IP アドレスに置き換えてください。 -
イメージを起動する際に
host_portが8888ではない場合、ポート番号を実際のポート番号に置き換えてください。
-
ステップ3:接続性のテスト
-
JupyterLab ページで、[PySpark] をクリックします。
-
次のコードを実行して、アクセス可能なすべてのデータベースをクエリします。
spark.sql("show databases").show()次の出力が表示されます。
%%spark spark.sql("show databases").show() Starting Spark application ID YARN Application ID Kind State Spark UI Driver log User Current session? 1 livy-pxxx pyspark idle Link None ✔ SparkSession available as 'spark'. +--------------------+ | namespace| +--------------------+ | default| | xxx db| | xxx dome| | hive test| +--------------------+
方法2:sparkmagic プラグインの使用
ステップ1:ゲートウェイとアクセストークンの作成
-
ゲートウェイを作成して起動します。
-
ゲートウェイページに移動します。
-
EMR コンソールにログインします。
-
左側のナビゲーションウィンドウで、EMR Serverless > Spark を選択します。
-
Spark ページで、対象のワークスペース名をクリックします。
-
EMR Serverless Spark ページで、左側のナビゲーションウィンドウの をクリックします。
-
-
Livy Gateway タブをクリックします。
-
Livy Gateway ページで、Livy ゲートウェイの作成 をクリックします。
-
[ゲートウェイの作成] ページで、Name (例:
Livy-gateway) を入力し、create をクリックします。要件に応じて他のパラメーターを調整できます。詳細については、「ゲートウェイの管理」をご参照ください。
-
Livy Gateway ページで、作成したゲートウェイを見つけ、[操作] 列の START をクリックします。
-
-
トークンを作成します。
-
Gateway ページで、
Livy-gatewayを見つけ、[操作] 列の Token Management をクリックします。 -
Create Token をクリックします。
-
Create Token ダイアログボックスで、Name (例:
Livy-token) を入力し、OK をクリックします。 -
トークン情報をコピーします。
重要トークンは作成後すぐにコピーする必要があります。後でトークン情報を表示することはできません。トークンの有効期限が切れたり、紛失したりした場合は、新しいトークンを作成するか、リセットしてください。
-
ステップ2:sparkmagic プラグインのインストールと有効化
-
次のコマンドを実行して sparkmagic プラグインをインストールします。
pip install sparkmagic -
Jupyter 環境 (Jupyter Notebook または JupyterLab) の拡張機能を有効にします。
-
Jupyter Notebook ユーザーの場合:
jupyter nbextension enable --py --sys-prefix widgetsnbextension -
JupyterLab ユーザーの場合:
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>Overview タブの Endpoint(Public) または Endpoint(Private)。
プライベートエンドポイントを使用する場合、Jupyter を実行しているマシンが Livy Gateway と同じリージョンにデプロイされていること、およびエンドポイントの
https://プレフィックスがhttp://に変更されていることを確認してください。<token>このプレースホルダーをステップ1でコピーしたトークンに置き換えます。
次の例では Python を使用します。
%spark add -s test -l python -u https://emr-spark-livy-gateway-cn-hangzhou.data.aliyun.com/api/v1/workspace/w-0aaxxx livycompute/lc-76c4pcxxx -a username -p t6k2zy Starting Spark application ID YARN Application ID Kind State Spark UI Driver log User Current session? 0 livy-idqxxx pyspark idle Link None ✓ SparkSession available as 'spark'.セッションのステータスが
idleに変わるまで 1~5 分間お待ちください。これは、セッションが正常に作成され、準備が整ったことを示しています。この時点で、UI には新しく作成されたセッションの詳細が表示され、インタラクティブな PySpark 開発を開始できます。また、Serverless Spark コンソールのターゲット Livy Gateway の Sessions タブでセッション情報を表示することもできます。 -
セッションを検証します。
セッションが正常に作成されると、
%%sparkを使用してコードを実行できます。たとえば、次のコードを使用すると、現在の Spark 環境にあるすべてのデータベースを表示できます。%%spark spark.sql("show databases").show()次の出力が表示されます。
%%spark spark.sql("show databases").show() +---------+ |namespace| +---------+ | default| | testdb| +---------+
(オプション) ステップ4:セッションリソースの解放
-
自動リリース
セッションは 2 時間非アクティブな状態が続くと自動的に終了します。
-
手動解放
-
sparkmagicプラグイン経由で解放されます。%spark delete -s <session_name> -
EMR Serverless Spark コンソールからのリリース:
対象の Livy ゲートウェイの Sessions タブで、解放したいセッションを見つけ、[操作] 列の Off をクリックします。
-