AnalyticDB for MySQL Spark を使用すると、Docker イメージを使用してインタラクティブな JupyterLab 開発環境を起動できます。この環境は、AnalyticDB for MySQL Spark に接続し、AnalyticDB for MySQL の計算リソースを使用してインタラクティブなテストと計算を実行するのに役立ちます。
前提条件
AnalyticDB for MySQL Enterprise Edition、Basic Edition、または Data Lakehouse Edition クラスタが作成されていること。
AnalyticDB for MySQL クラスタにデータベースアカウントが作成されていること。
Alibaba Cloud アカウントを使用している場合は、特権アカウントを作成するだけで済みます。
Resource Access Management (RAM) ユーザーを使用している場合は、特権アカウントと標準アカウントを作成し、標準アカウントを RAM ユーザーに関連付ける必要があります。
アカウントの認証が完了していること。
Spark アプリケーションのログ保存パスが構成されていること。
説明AnalyticDB for MySQL コンソール にログインします。管理するクラスタを見つけ、クラスタ ID をクリックします。左側のナビゲーションウィンドウで、 を選択します。ログ設定 をクリックします。表示されるダイアログボックスで、デフォルトパスを選択するか、カスタムストレージパスを指定します。カスタムストレージパスを OSS のルートディレクトリに設定することはできません。カスタムストレージパスに少なくとも 1 つのフォルダレイヤーが含まれていることを確認してください。
使用上の注意
AnalyticDB for MySQL Spark は、Python 3.7 または Scala 2.12 でのみインタラクティブな Jupyter ジョブをサポートしています。
インタラクティブな Jupyter ジョブは、一定時間アイドル状態が続くと Spark リソースを自動的に解放します。デフォルトの解放時間は 1,200 秒です(最後のコードブロックが実行されてから 1,200 秒後にリソースが自動的に解放されます)。Jupyter Notebook セルで次のコマンドを使用して
spark.adb.sessionTTLSecondsパラメーターを構成し、Spark リソースの自動解放時間を変更できます。%%configure -f { "spark.adb.sessionTTLSeconds": "3600" // Spark リソースの自動解放時間を 3600 秒に設定 }
AnalyticDB for MySQL Spark に接続する
AnalyticDB for MySQL 提供のイメージの JupyterLab を使用して Spark に接続する
AnalyticDB for MySQL の Jupyter イメージをプルします。次のコマンドを実行します。
docker pull registry.cn-hangzhou.aliyuncs.com/adb-public-image/adb-spark-public-image:adb.notebook.0.5.preインタラクティブな JupyterLab 開発環境を起動します。
コマンド構文:
docker run -it -p {ホストポート}:8888 -v {ホストファイルパス}:{Docker ファイルパス} registry.cn-hangzhou.aliyuncs.com/adb-public-image/adb-spark-public-image:adb.notebook.0.5.pre -d {ADB インスタンス ID} -r {リソースグループ名} -e {API エンドポイント} -i {AK ID} -k {AK シークレット} -t {StsToken} # StsToken または AK のいずれかを選択次の表にパラメーターを示します。
パラメーター
必須
説明
-p
いいえ
ホストポートをコンテナポートにマップします。
-p {ホストポート}:{コンテナポート}の形式でパラメーターを指定します。ホストポートにランダムな値を指定し、コンテナポートを
8888に設定します。例:-p 8888:8888。-v
いいえ
ホストパスをマウントせずに Docker コンテナを無効にすると、編集ファイルが失われる可能性があります。Docker コンテナを無効にすると、コンテナは実行中のすべてのインタラクティブ Spark ジョブを終了しようとします。編集ファイルの損失を防ぐには、次のいずれかの方法を使用できます。
インタラクティブな JupyterLab 開発環境を起動するときに、ホストパスを Docker コンテナにマウントし、ジョブファイルを対応するファイルパスに保存します。
-v {ホストパス}:{Docker ファイルパス}の形式でパラメーターを指定します。Docker コンテナのファイルパスにランダムな値を指定します。推奨値:/root/jupyter。Docker コンテナを無効にする前に、すべてのファイルがコピーされて保存されていることを確認してください。
例:
-v /home/admin/notebook:/root/jupyter。この例では、/home/admin/notebookパスに保存されているホストファイルが Docker コンテナの/root/jupyterパスにマウントされます。説明編集中のノートブックファイルを
/tmpフォルダに保存します。Docker コンテナを無効にした後、ホストの/home/admin/notebookパスで対応するファイルを表示できます。Docker コンテナを再度有効にすると、ファイルの実行を続行できます。詳細については、「ボリューム」をご参照ください。-d
はい
AnalyticDB for MySQL Enterprise Edition、Basic Edition、または Data Lakehouse Edition クラスタの ID。
AnalyticDB for MySQL コンソール にログインし、[クラスタ] ページに移動して、クラスタ ID を表示できます。
-r
はい
AnalyticDB for MySQL クラスタのジョブリソースグループの名前。
AnalyticDB for MySQL コンソールにログインし、左側のナビゲーションウィンドウで[クラスター管理 > Resource Management] を選択し、[リソースグループ] タブをクリックすると、リソースグループ名を表示できます。
-e
はい
AnalyticDB for MySQL クラスタのエンドポイント。
詳細については、「エンドポイント」をご参照ください。
-i
はい (特定のシナリオ)
Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID と AccessKey シークレット。
AccessKey ID と AccessKey シークレットの表示方法については、「アカウントと権限」をご参照ください。
-k
-t
はい (特定のシナリオ)
Security Token Service (STS) トークン。RAM ロールの 一時的な ID クレデンシャルです。
権限を持つ RAM ユーザーは、自身の AccessKey ペアを使用して AssumeRole - RAM ロールの 一時的な ID クレデンシャルを取得する API 操作を呼び出し、RAM ロールの STS トークンを取得し、STS トークンを使用して Alibaba Cloud リソースにアクセスできます。
例:
docker run -it -p 8888:8888 -v /home/admin/notebook:/root/jupyter registry.cn-hangzhou.aliyuncs.com/adb-public-image/adb-spark-public-image:adb.notebook.0.5.pre -d amv-bp164l******** -r test -e adb.aliyuncs.com -i LTAI**************** -k ****************インタラクティブな JupyterLab 開発環境を起動すると、次の情報が返されます。
http://127.0.0.1:8888/lab?token=1e2caca216c1fd159da607c6360c82213b643605f11ef291URL をコピーしてブラウザに貼り付け、JupyterLab を使用して AnalyticDB for MySQL Spark に接続できます。[I 2023-11-24 09:55:09.852 ServerApp] nbclassic | 拡張機能が正常にロードされました。 [I 2023-11-24 09:55:09.852 ServerApp] sparkmagic 拡張機能が有効になりました! [I 2023-11-24 09:55:09.853 ServerApp] sparkmagic | 拡張機能が正常にロードされました。 [I 2023-11-24 09:55:09.853 ServerApp] ローカルディレクトリ /root/jupyter からノートブックを提供しています [I 2023-11-24 09:55:09.853 ServerApp] Jupyter Server 1.24.0 は http://419e63fc7821:8888/lab?token=1e2caca216c1fd159da607c6360c82213b643605f11ef291 で実行されています [I 2023-11-24 09:55:09.853 ServerApp] または http://127.0.0.1:8888/lab?token=1e2caca216c1fd159da607c6360c82213b643605f11ef291 [I 2023-11-24 09:55:09.853 ServerApp] Ctrl+C を使用してこのサーバーを停止し、すべてのカーネルをシャットダウンします (確認をスキップするには 2 回)。説明インタラクティブな JupyterLab 開発環境の起動時にエラーメッセージが表示された場合は、
proxy_{timestamp}.logファイルを参照してトラブルシューティングできます。
ローカルにインストールされた Jupyter Notebook を使用して Spark に接続する
Jupyter Notebook 環境をインストールして構成する
インタラクティブな Spark ジョブを実行するために、SparkMagic プラグインを Jupyter にインストールする。Jupyter のバージョンに基づいて適切な方法を選択します。次の例は JupyterLab 3.x の場合です。
重要すべてのオプションの手順は、スキップしたり順序を変更したりせずに、厳密な順序で実行する必要があります。いずれかの手順をスキップした場合、担当エンジニアは Jupyter の起動ログから環境の問題を分析できず、エラーを自分で解決する必要があります。
SparkMagic をインストールします。
pip install sparkmagicipywidgets をインストールします。
pip install ipywidgets(オプション) ラッパーカーネルをインストールします。
pip show sparkmagicを実行すると、sparkmagic のインストールパスが表示されます。そのディレクトリに切り替えて、以下を実行します。jupyter-kernelspec install sparkmagic/kernels/sparkkernel jupyter-kernelspec install sparkmagic/kernels/pysparkkernel jupyter-kernelspec install sparkmagic/kernels/sparkrkernel(オプション) SparkMagic の
config.json構成ファイル (デフォルトパスは~/.sparkmagic/config.json) を変更し、127.0.0.1:5000をリッスンする IP とポートに変更します。以下は構成構造の一部です。詳細については、関連する例 を参照してください。"kernel_python_credentials": { "username": "", // ユーザー名 "password": "", // パスワード "url": "http://127.0.0.1:5000", // リッスンする IP アドレスとポート "auth": "None" // 認証方式 }, "kernel_scala_credentials": { "username": "", // ユーザー名 "password": "", // パスワード "url": "http://127.0.0.1:5000", // リッスンする IP アドレスとポート "auth": "None" // 認証方式 }, "kernel_r_credentials": { "username": "", // ユーザー名 "password": "", // パスワード "url": "http://127.0.0.1:5000" // リッスンする IP アドレスとポート },(オプション) コードでクラスタを変更できるようにサーバー拡張機能を有効にします。
jupyter server extension enable --py sparkmagic
AnalyticDB for MySQL プロキシを起動する
次のいずれかの方法を使用して、AnalyticDB for MySQL プロキシを起動できます。
方法 1: Docker を使用してプロキシを起動する
AnalyticDB for MySQL の Jupyter イメージをプルします。次のコマンドを実行します。
docker pull registry.cn-hangzhou.aliyuncs.com/adb-public-image/adb-spark-public-image:adb.notebook.0.5.preDocker プロキシを起動します。次のコマンドを実行してコンテナを起動し、ローカルポート 5000 でリッスンします。
docker run -it -p 5000:5000 -v {ホストファイルパス}:{Docker ファイルパス} registry.cn-hangzhou.aliyuncs.com/adb-public-image/adb-spark-public-image:adb.notebook.0.5.pre -d {ADB インスタンス ID} -r {リソースグループ名} -e {API エンドポイント} -i {AK ID} -k {AK シークレット} -t {StsToken} # StsToken または AK のいずれかを選択次の表にパラメーターを示します。
パラメーター
必須
説明
-p
いいえ
ホストポートをコンテナポートにマップします。
-p {ホストポート}:{コンテナポート}の形式でパラメーターを指定します。ホストポートにランダムな値を指定し、コンテナポートを
5000に設定します。例:-p 5000:5000。-v
いいえ
ホストパスをマウントせずに Docker コンテナを無効にすると、編集ファイルが失われる可能性があります。Docker コンテナを無効にすると、コンテナは実行中のすべてのインタラクティブ Spark ジョブを終了しようとします。編集ファイルの損失を防ぐには、次のいずれかの方法を使用できます。
インタラクティブな JupyterLab 開発環境を起動するときに、ホストパスを Docker コンテナにマウントし、ジョブファイルを対応するファイルパスに保存します。
-v {ホストパス}:{Docker ファイルパス}の形式でパラメーターを指定します。Docker コンテナのファイルパスにランダムな値を指定します。推奨値:/root/jupyter。Docker コンテナを無効にする前に、すべてのファイルがコピーされて保存されていることを確認してください。
例:
-v /home/admin/notebook:/root/jupyter。この例では、/home/admin/notebookパスに保存されているホストファイルが Docker コンテナの/root/jupyterパスにマウントされます。説明編集中のノートブックファイルを
/tmpフォルダに保存します。Docker コンテナを無効にした後、ホストの/home/admin/notebookパスで対応するファイルを表示できます。Docker コンテナを再度有効にすると、ファイルの実行を続行できます。詳細については、「ボリューム」をご参照ください。-d
はい
AnalyticDB for MySQL Enterprise Edition、Basic Edition、または Data Lakehouse Edition クラスタの ID。
AnalyticDB for MySQL コンソール にログインし、[クラスタ] ページに移動して、クラスタ ID を表示できます。
-r
はい
AnalyticDB for MySQL クラスタのジョブリソースグループの名前。
AnalyticDB for MySQL コンソールにログインし、左側のナビゲーションウィンドウで[クラスター管理 > Resource Management]を選択し、[リソースグループ] タブをクリックすると、リソースグループ名を表示できます。
-e
はい
AnalyticDB for MySQL クラスタのエンドポイント。
詳細については、「エンドポイント」をご参照ください。
-i
はい (特定のシナリオ)
Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID と AccessKey シークレット。
AccessKey ID と AccessKey シークレットの表示方法については、「アカウントと権限」をご参照ください。
-k
-t
はい (特定のシナリオ)
Security Token Service (STS) トークン。RAM ロールの 一時的な ID クレデンシャルです。
権限を持つ RAM ユーザーは、自身の AccessKey ペアを使用して AssumeRole - RAM ロールの 一時的な ID クレデンシャルを取得する API 操作を呼び出し、RAM ロールの STS トークンを取得し、STS トークンを使用して Alibaba Cloud リソースにアクセスできます。
方法 2: コマンドラインを使用してプロキシをインストールする
ダウンロード し、プロキシをインストールします。
pip install aliyun-adb-livy-proxy-0.0.1.zip次のコマンドを実行してプロキシを起動します。
説明AnalyticDB for MySQL プロキシが正常にインストールされた後、
adbproxy --helpを実行してパラメーターリストを表示できます。adbproxy --db {ADB インスタンス ID} --rg {リソースグループ名} --endpoint {API エンドポイント} --host 127.0.0.1 --port 5000 -i {AK ID} -k {AK シークレット} -t {StsToken} # StsToken または AK のいずれかを選択次の表にパラメーターを示します。
パラメーター
必須
説明
--db
はい
AnalyticDB for MySQL Enterprise Edition、Basic Edition、または Data Lakehouse Edition クラスタの ID。
AnalyticDB for MySQL コンソール にログインし、[クラスタ] ページに移動して、クラスタ ID を表示できます。
--rg
はい
AnalyticDB for MySQL クラスタのジョブリソースグループの名前。
AnalyticDB for MySQL コンソールにログインし、左側のナビゲーションウィンドウで [クラスター管理 > Resource Management] を選択し、[リソースグループ] タブをクリックすると、リソースグループ名を表示できます。
--endpoint
はい
AnalyticDB for MySQL クラスタのエンドポイント。
詳細については、「エンドポイント」をご参照ください。
--host
いいえ
adbproxy サービスがバインドするローカル IP アドレス。デフォルト値は
127.0.0.1です。--port
いいえ
adbproxy サービスがリッスンするポート番号。デフォルト値は
5000です。-i
はい (特定のシナリオ)
AnalyticDB for MySQL アクセス権限を持つ Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID と AccessKey シークレット。
AccessKey ID と AccessKey シークレットの取得方法については、「アカウントと権限」をご参照ください。
-k
-t
はい (特定のシナリオ)
Security Token Service (STS) トークン。RAM ロールの 一時的な ID クレデンシャルです。
権限を持つ RAMユーザーは、自身の AccessKey ペアを使用して AssumeRole - RAM ロールの 一時的な ID クレデンシャルを取得する API 操作を呼び出し、RAM ロールの STS トークンを取得し、STS トークンを使用して Alibaba Cloud リソースにアクセスできます。
起動に成功すると、コンソールに関連するログ情報が表示されます。
Jupyter を起動する
次のコマンドを使用して、Jupyter インタラクティブ開発環境を起動します。
jupyter labカスタムリスニングアドレスを設定した場合は、jupyter lab --ip=*** を実行して Jupyter を起動します。ここで、*** はカスタムリスニングアドレスです。
起動に成功すると、次の情報が返されます。http://127.0.0.1:8888/lab?token=1e2caca216c1fd159da607c6360c82213b643605f11ef291 URL をコピーしてブラウザに貼り付け、Jupyter を使用して AnalyticDB for MySQL Spark に接続できます。
[I 2025-07-02 17:36:16.051 ServerApp] ローカルディレクトリ /home/newuser からノートブックを提供しています
[I 2025-07-02 17:36:16.052 ServerApp] Jupyter Server 2.16.0 は http://419e63fc7821:8888/lab?token=1e2caca216c1fd159da607c6360c82213b643605f11ef291 で実行されています
[I 2025-07-02 17:36:16.052 ServerApp] http://127.0.0.1:8888/lab?token=1e2caca216c1fd159da607c6360c82213b643605f11ef291
[I 2025-07-02 17:36:16.052 ServerApp] Ctrl+C を使用してこのサーバーを停止し、すべてのカーネルをシャットダウンします (確認をスキップするには 2 回)。
Jupyter でジョブを実行する
リソースを起動し、ジョブの最大 ACU 使用量を定義する
Jupyter を使用して AnalyticDB for MySQL Spark に接続した後、ページの [PySpark] をクリックして新しい PySpark ジョブを作成します。Spark ジョブは次のデフォルトの構成パラメーターで実行されます。
{ "kind": "pyspark", // ジョブの種類 "heartbeatTimeoutInSecond": "60", // ハートビートタイムアウト(秒) "spark.driver.resourceSpec": "medium", // ドライバーのリソース仕様 "spark.executor.resourceSpec": "medium", // Executor のリソース仕様 "spark.executor.instances": "1", // Executor のインスタンス数 "spark.dynamicAllocation.shuffleTracking.enabled": "true", // シャッフルトラッキングの有効化 "spark.dynamicAllocation.enabled": "true", // 動的割り当ての有効化 "spark.dynamicAllocation.minExecutors": "0", // 最小 Executor 数 "spark.dynamicAllocation.maxExecutors": "1", // 最大 Executor 数 "spark.adb.sessionTTLSeconds": "1200" // セッションの TTL(秒) }Spark アプリケーションの構成パラメーターを変更するには、
%%configure -fステートメントを使用します。カーネルを再起動します。
トップナビゲーションバーで、 を選択します。実行中の Spark アプリケーションが Jupyter 開発ページに表示されていないことを確認してください。

Jupyter Notebook セルにカスタム Spark アプリケーション構成パラメーターを入力します。
重要カスタム Spark アプリケーション構成パラメーターを指定する場合、spark.dynamicAllocation.enabled パラメーターを false に設定する必要があります。
例:
この構成では、Spark ジョブに 32 個の Executor を割り当て、各 Executor の仕様は
medium(2 コアおよび 8 GB メモリ) です。ジョブ全体で合計 64 ACU の計算リソースを割り当てることができます。%%configure -f { "spark.driver.resourceSpec":"large", // ドライバーのリソース仕様 "spark.sql.hive.metastore.version":"adb", // Hive Metastore のバージョン "spark.executor.resourceSpec":"medium", // Executor のリソース仕様 "spark.adb.executorDiskSize":"100Gi", // Executor のディスクサイズ "spark.executor.instances":"32", // Executor のインスタンス数 "spark.dynamicAllocation.enabled":"false", // 動的割り当ての有効化 "spark.network.timeout":"30000", // ネットワークタイムアウト "spark.memory.fraction":"0.75", // メモリの割合 "spark.memory.storageFraction":"0.3" // ストレージメモリ の割合 }Spark アプリケーション構成パラメーターの詳細については、「Spark アプリケーション構成パラメーター」および「Spark 公式 Web サイト」をご参照ください。
ボタンをクリックして、Spark アプリケーション構成パラメーターを変更します。重要Jupyter Notebook ページを閉じると、指定したカスタム構成パラメーターは有効ではなくなります。 Jupyter Notebook ページを再度開いた後に Spark アプリケーション パラメーターを指定しないと、デフォルトの構成パラメーターを使用して Spark ジョブが実行されます。
Jupyter Notebook ページで Spark ジョブを実行すると、ジョブのすべての構成は、バッチジョブを送信するときに必要な JSON 構造の
confオブジェクトではなく、JSON 構造に直接書き込まれます。
ジョブを実行する
sparkコマンドを入力して、SparkSession を開始します。
説明戻り値にある [リンク] をクリックして Spark UI インターフェイスにアクセスし、Spark ジョブログなどの情報を表示します。
Jupyter Notebook セルで Spark SQL を実行して、AnalyticDB for MySQL クラスタで使用可能なデータベースのリストをクエリします。
重要Spark SQL コードを実行する前に
%%sqlを追加する必要があります。追加しないと、デフォルトで Python コードとして解析されます。%%helpを実行して、マジックコマンドとその使用方法の詳細を確認できます。%%sql show databases
クエリ結果は AnalyticDB for MySQL の結果と一致しています。