3
2

watsonx.data: Spark lab を使ってVSCodeからSparkアプリを実行する

Last updated at Posted at 2024-08-05

Spark labは、watsonx.dataと連携したSparkエンジン上で動作するSparkクラスタ上でSparkアプリケーションをVisual Studio Code(以下VSCode)を使ってインタラクティブにプログラム、デバッグ、サブミット、テストできるSparkベースの開発環境です。

VSCodeの拡張機能として提供されており、ローカルシステムにインストールすることで、VSCodeを使用してSpark IDEにアクセスできます。

IBM Analytics Engine Sparkからwatsonx.data を操作: 「3. Sparkによる処理」 を書いたときはデバッグが難しすぎて困りましたが、Spark labを使えばVSCodeでお手軽に動作確認できます。

Spark labs - Development environmentにドキュメントがありますが、試行錯誤が必要でした。

当記事は試行錯誤なしで使えるように、SaaS版 watsonx.dataのNative Sparkを使用したVSCodeの設定方法と使い方について説明します。

1. 前提

2. watsonx.data extensionとRemote SSHのVSCodeへの導入

watsonx.data extensionをVSCodeに導入します。

2.1: 左側のアクティビティバーから「拡張機能」のアイコンをクリックし、表示された検索窓にwatsonx.dataと入力

image.png

2.2: 表示された「IBM watsonx.data」をクリックし、「インストール」をクリックします

watsonx.data extensionが導入されます
image.png

導入が完了すると 左側のアクティビティバーにwatsonx.dataのアイコンが表示されます
image.png

2.3: Remote - SSH Extension をVSCodeへ導入します

「Remote - SSH Extension is required for this extension to work.」と書いてありますので、この拡張機能も導入します。

検索窓にRemote - SSHと入力し、表示された「Remote - SSH」をクリックします。
image.png

「インストール」をクリックします
image.png

これでRemote - SSHは導入完了です。

3. SSH公開鍵・秘密鍵の作成

既に使用可能なSSH公開鍵・秘密鍵を自分のPC(Mac?)上に作成済みであればそれが使用可能ですので、ここはskipして先に進んでください。

Macでしかやってないので、Macでの方法を記載します。
Windowsの場合も「ssh公開鍵作成 windows」 でググれば方法は出てきますので、その方法でやってみてください。あるいは英語であれば「IBM watsonx.data」拡張機能の説明に書いてあります。

参考: 「IBM watsonx.data」拡張機能の説明の出し方
左側のアクティビティバーから「拡張機能」のアイコンをクリック → インストール済みに表示された「IBM watsonx.data」をクリック → 「拡張機能 IBM watsonx.data」タブが表示される(スクロールするとSet up SSH on your machineという記載あり)
image.png

Macのターミナルを開いて、以下のコマンドを入力

ssh-keygen -t rsa -N ""

File名を聞かれますが、デフォルトでよければそのままEnterキーを押下してください

Enter file in which to save the key (/Users/<自分のid>/.ssh/id_rsa):

コマンドが完了すると、ファイル名をデフォルトにした場合は以下の2つのファイルができます。

  • 秘密鍵: ~/.ssh/id_rsa
  • 公開鍵: ~/.ssh/id_rsa.pub

この2つのファイルパスは後の設定に入力します。

4. watsonx.data extensionを設定

4.1:  設定を表示

左側のアクティビティバーのwatsonx.dataのアイコンをクリック
image.png

最初は以下のようなメッセージが表示されます。しばし待ちます
image.png

歯車アイコンをクリックします
image.png

「設定」タブが開きます
image.png

4.2:  設定

必須の設定値を入力します。

Watsonx-data: Environment Type:

SaaSの場合はIBM Public Cloudに設定します
image.png

Watsonx-data: Host

インスタンスがプロビジョニングされるリージョンのホスト名、<region>.lakehouse.cloud.ibm.com
watsonx.dataのweb画面のURLのホスト名と同じです
image.png

Watsonx-data: Instance ID

watsonx.data SaaS インスタンスの CRN
CRNはwatsonx.dataのweb画面から「こちら」の方法で取得できます
image.png

Watsonx-data: Private Key Path

3で作成した秘密鍵のファイルのPATHを入れます
image.png

Watsonx-data: Public Key Path

3で作成した公開鍵のファイルのPATHを入れます
image.png

Watsonx-data: User Name

ibmlhapikey_<userid> です。ここで <userid> は、watsonx.data インスタンスに接続するユーザーの IBM ID です。
IBM IDがaaa@abc.comであれば、ibmlhapikey_aaa@abc.comとなります。
image.png

設定の入力が完了したら、左上の「Refresh」アイコンをクリックします。

image.png

APIKEYを入力するフィールドが表示されますので、APIKEYを入力し、Enterキーを押下します

image.png

下部に出力が表示されます。エラーが出なければOKです。
エラーが出た場合はAPIKEYが間違っていますので、再度「Refresh」アイコンをクリックして正しいAPIKEYを入力して下さい。
image.png

5. Spark labの作成

5.1 前準備

5.1.1. 公開鍵の中身を表示

公開鍵ファイルの中身をコピぺする必要があるので、中身を表示しておいてください。
Macの場合はターミナルから以下のコマンドで表示できます。
デフォルト以外のファイル名の場合はファイル名を変更してください。

cat ~/.ssh/id_rsa.pub

実行例
image.png

5.1.2. spark.hadoop.wxd.apikeyの値を準備

Working with the watsonx.data catalog and storageに書いてある
spark.hadoop.wxd.apiKey=Basic base64(ibmlhapikey_ibmcloudid:apikey)
の値の準備が必要です。

base64(ibmlhapikey_ibmcloudid:apikey)の部分の意味は
ibmlhapikey_<アクセスするIBMCloud_ID>:<apikey>をbase64エンコードしたもの という意味だそうです。

つまりこの部分をあらかじめ作っておく必要があります。

以下にibmlhapikey_<アクセスするIBMCloud_ID>:<apikey>をbase64エンコードしたものをprintするpythonコードを作りましたので、値を出力しておいてください
とはアクセスするIBM CloudのIDとAPIKEYに、それぞれ置き換えてください。

import base64

ibmid = "<IBM CloudのID>"
apikey ="<APIKEY>"
key_value=f"ibmlhapikey_{ibmid}:{apikey}"
# print(key_value)
print(base64.b64encode(key_value.encode()).decode())

5.2 Spark labの作成

準備ができたら Spark labを作成します。

5.2.1: + アイコン クリック

Spark - Spark running のあたりにマウスをあてると、+ アイコンが表示されますので、それをクリックします。 作成Spark Labというタブが開きます。
image.png

image.png

必須で値を入れるのはSpark構成 ユーザー公開鍵の提供です。あとはお好みで設定してください。

5.2.2: Spark構成spark.hadoop.wxd.apiKey値をセット

以下のように入れます:

spark.hadoop.wxd.apiKey=Basic <5.1.2で準備したibmlhapikey_<アクセスするIBMCloud_ID>:&lt;apikey>をbase64エンコードしたもの>

例:  <5.1.2で準備したibmlhapikey_<アクセスするIBMCloud_ID>:<apikey>をbase64エンコードしたもの> が XXXXXXXXXXXXXXXXXXXXXzaGl0b0BqcC5pYm0uY29tOllzcHBqdGtRWlNmdVJfbUdTSFVxMUxLZlh2QldkVnFDWE5XXXXXXXXXXXXXXXX だった場合:

spark.hadoop.wxd.apikey=Basic XXXXXXXXXXXXXXXXXXXXXzaGl0b0BqcC5pYm0uY29tOllzcHBqdGtRWlNmdVJfbUdTSFVxMUxLZlh2QldkVnFDWE5XXXXXXXXXXXXXXXX

image.png

5.2.3:  ユーザー公開鍵の提供に公開鍵の中身をコピペ

5.1.1 で表示しておいた公開鍵の中身をそのままコピぺで入れてください
image.png

5.2.4: 「+作成」 ボタンをクリック

image.png

右下に`Creating spark cluster...`というメッセージが表示されるのでしばし待ちます
image.png

完了するとSpark - Spark running の下に作成されたSpark Labが表示されます。
image.png

6. 作成したSpark Labを起動

作成したSpark Labをクリックします
image.png

新規にウィンドウが開いてSpark Lab(=watsonx.data上のSpark)に接続に行くのでしばし待ちます
image.png

左下のメッセージがリモートを開いていますからSSH 127.0.0.1:xxxx(xxxxは数字)となったら接続完了です。
image.png

7. Spark Labに拡張機能をインストール

ここからはわかりやすくするためと動作確認用に、あらかじめ準備してあるspark_test.ipynbというjupyter notebookのファイルとspark_test.pyというpythonのファイルを使用します。
以下からダウンロードしておいてください:

7.1 ダウンロードしたspark_test.ipynbをSpark Labの左側のエクスプローラーにドラッグアンドドロップでアップロードします。

image.png

7.2 アップロードしたspark_test.ipynbをダブルクリックして開き、'Python' 拡張機能 をインストール

spark_test.ipynbを開くとPython 言語 用のおすすめ拡張機能 'Python' 拡張機能 提供元: Microsoft をインストールしますか?というメッセージが右下に表示されますで、「インストール」をクリックしてインストールします。

image.png

左側の拡張機能のエクスプローラー部分が「インストール済み」になるまで待ちます
image.png

7.3 spark_test.ipynb タブをクリックしてspark_test.ipynbを再度表示し、 右上の「カーネルの選択」をクリックし、拡張機能を導入

image.png

しばし待つと拡張機能の候補をインストールまたは有効にする Python + Jupyterというドロップダウンが、上部の「カーネルの選択」の下に表示されますので、そこをクリックします。
image.png

しばし待つと「base」がセットされます。
image.png

もしセットされない場合は、Python環境をクリックして、baseとついてるものを選択してください。
image.png

これでJupyter Notebookが実行できるようになりました!

8. Jupyter Notebookを実行

試しにspark_test.ipynb を実行してみます。
「全てを実行」をクリックして実行してみます。
image.png
2番目のセルでは、スキーマ一覧を表示しています。
image.png

あとは新規に.ipynbの拡張子でファイル作成するか、同じようにnotebookのファイルをドラッグアンドドロップでアップロードして自分のコードを実行してみてください。

9. Python fileを実行

9.1 ダウンロードしたspark_test.pyをSpark Labの左側のエクスプローラーにドラッグアンドドロップでアップロードします

9.2 アップロードしたspark_test.pyをダブルクリックして開きます

9.3 右上の実行アイコンをクリックして実行します

image.png

これもスキーマ一覧を表示するコードです。結果はターミナルに表示されます。
いろいろWARNINGは出ますが、最終的にnotebookを実行した時と同じスキーマ一覧が表示されていると思います。
image.png

あとは新規に.pyの拡張子でファイル作成するか、同じようにpythonのファイルをドラッグアンドドロップでアップロードして自分のコードを実行してみてください。

10. 作成したファイルのローカルへの保存

環境が消えてしまうとファイルも消えてしまうので、終わる前に必ず残したいファイルはローカルにダウンロードしてください。
エクスプローラー画面から、保存したいファイルを右クリック、「ダウンロード」でダウンロード可能です
image.png

11. The Spark user interface (UI)

ローカルでThe Spark user interface (UI) を確認できるようなことがドキュメントには記載されていますが、あまりうまく動かなかったので、サーバー側での確認をお勧めします(2024/8/4現在の情報)
以下のドキュメントを参照の上、Spark history serverのUIで確認してみてください。
Accessing the Spark history server
image.png

12. 接続の切断

必要なファイルをローカルに保存したら、セッションを切断します。尚セッションを切断のみならファイルは通常は消えませんが、うまく復活できなかったことがあったので、念の為のローカル保存をお勧めします(長時間使ってない場合は消えるような気がしてます)。
また、切断前にすべてのファイルは閉じておいてください。

右下の青い「SSH: 127.0.0.1:xxxx」をクリックします
image.png

上部にドロップダウンが表示されますので、「リモート接続を終了する」をクリックします
image.png

接続が切断されるとVSCodeの初期画面になります。
image.png

13. 2回目以降のSpark Labの起動

左側のアクティビティバーのwatsonx.dataのアイコンをクリックすると、Spark Labのメニューが表示されるので、そこから起動して下さい。
image.png

image.png

作成済みのものはクリックすると以前と同じ設定、拡張機能もファイルもそのままで起動します。
が、復活しないこともあったので、何度やってもうまくいかない場合は、削除して作り直してください。

マウスカーソルをあてるとゴミ箱アイコンが表示されるので、クリックすると削除できます。
image.png
5.Spark Labの作成からやり直してください。

14. その他

デフォルト Spark 構成はサーバー側のSparkの詳細を表示すると表示可能です。これらの構成は設定済みでコード側で設定不要です。

image.png

15. 参考情報

pyspark は以下を参照してください:
https://spark.apache.org/docs/3.3.4/api/python/getting_started/index.html

watsonx.dataでのコードは以下を参考にして下さい:
Enhancing Spark application submission using Spark access control extension

Spark lab公式ドキュメントはこちら:
Spark labs - Development environment

以上です。

3
2
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2