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. 前提
-
Native sparkエンジンが追加済み かつ MetastoreAccessロールの付与済み
- 追加していない場合は「watsonx.data: Sparkエンジンの追加」の方法で追加してください
- 「5. IAMでMetastoreAccessロールの付与 」は必須ですので必ず設定してください
- 追加していない場合は「watsonx.data: Sparkエンジンの追加」の方法で追加してください
-
APIKEY取得済み
-
取得していない場合は以下のどちらかの方法で取得してください
-
-
MetastoreAccessロールの付与をお願いします
-
VSCode導入済み
2. watsonx.data extensionとRemote SSHのVSCodeへの導入
watsonx.data extensionをVSCodeに導入します。
2.1: 左側のアクティビティバーから「拡張機能」のアイコンをクリックし、表示された検索窓にwatsonx.data
と入力
2.2: 表示された「IBM watsonx.data」をクリックし、「インストール」をクリックします
導入が完了すると 左側のアクティビティバーにwatsonx.dataのアイコンが表示されます
2.3: Remote - SSH Extension をVSCodeへ導入します
「Remote - SSH Extension is required for this extension to work.」と書いてありますので、この拡張機能も導入します。
検索窓にRemote - SSH
と入力し、表示された「Remote - SSH」をクリックします。
これで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
という記載あり)
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のアイコンをクリック
4.2: 設定
必須の設定値を入力します。
Watsonx-data: Environment Type:
SaaSの場合はIBM Public Cloud
に設定します
Watsonx-data: Host
インスタンスがプロビジョニングされるリージョンのホスト名、<region>.lakehouse.cloud.ibm.com
watsonx.dataのweb画面のURLのホスト名と同じです
Watsonx-data: Instance ID
watsonx.data SaaS インスタンスの CRN
CRNはwatsonx.dataのweb画面から「こちら」の方法で取得できます
Watsonx-data: Private Key Path
Watsonx-data: Public Key Path
Watsonx-data: User Name
ibmlhapikey_<userid>
です。ここで <userid> は、watsonx.data インスタンスに接続するユーザーの IBM ID です。
IBM IDがaaa@abc.com
であれば、ibmlhapikey_aaa@abc.com
となります。
設定の入力が完了したら、左上の「Refresh」アイコンをクリックします。
APIKEYを入力するフィールドが表示されますので、APIKEYを入力し、Enterキーを押下します
下部に出力が表示されます。エラーが出なければOKです。
エラーが出た場合はAPIKEYが間違っていますので、再度「Refresh」アイコンをクリックして正しいAPIKEYを入力して下さい。
5. Spark labの作成
5.1 前準備
5.1.1. 公開鍵の中身を表示
公開鍵ファイルの中身をコピぺする必要があるので、中身を表示しておいてください。
Macの場合はターミナルから以下のコマンドで表示できます。
デフォルト以外のファイル名の場合はファイル名を変更してください。
cat ~/.ssh/id_rsa.pub
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というタブが開きます。
必須で値を入れるのはSpark構成
と ユーザー公開鍵の提供
です。あとはお好みで設定してください。
5.2.2: Spark構成
にspark.hadoop.wxd.apiKey
値をセット
以下のように入れます:
spark.hadoop.wxd.apiKey=Basic <5.1.2で準備したibmlhapikey_<アクセスするIBMCloud_ID>:<apikey> をbase64エンコードしたもの> |
---|
例: <5.1.2で準備したibmlhapikey_<アクセスするIBMCloud_ID>:<apikey>をbase64エンコードしたもの> が XXXXXXXXXXXXXXXXXXXXXzaGl0b0BqcC5pYm0uY29tOllzcHBqdGtRWlNmdVJfbUdTSFVxMUxLZlh2QldkVnFDWE5XXXXXXXXXXXXXXXX
だった場合:
spark.hadoop.wxd.apikey=Basic XXXXXXXXXXXXXXXXXXXXXzaGl0b0BqcC5pYm0uY29tOllzcHBqdGtRWlNmdVJfbUdTSFVxMUxLZlh2QldkVnFDWE5XXXXXXXXXXXXXXXX |
---|
5.2.3: ユーザー公開鍵の提供
に公開鍵の中身をコピペ
5.1.1 で表示しておいた公開鍵の中身をそのままコピぺで入れてください
5.2.4: 「+作成」 ボタンをクリック
右下に`Creating spark cluster...`というメッセージが表示されるのでしばし待ちます
完了するとSpark - Spark running
の下に作成されたSpark Labが表示されます。
6. 作成したSpark Labを起動
新規にウィンドウが開いてSpark Lab(=watsonx.data上のSpark)に接続に行くのでしばし待ちます
左下のメッセージがリモートを開いています
からSSH 127.0.0.1:xxxx
(xxxxは数字)となったら接続完了です。
7. Spark Labに拡張機能をインストール
ここからはわかりやすくするためと動作確認用に、あらかじめ準備してあるspark_test.ipynb
というjupyter notebookのファイルとspark_test.py
というpythonのファイルを使用します。
以下からダウンロードしておいてください:
-
spark_test.ipynb
: https://github.com/kyokonishito/watsonx_spark/blob/main/spark_test.ipynb -
spark_test.py
: https://github.com/kyokonishito/watsonx_spark/blob/main/spark_test.py
7.1 ダウンロードしたspark_test.ipynb
をSpark Labの左側のエクスプローラーにドラッグアンドドロップでアップロードします。
7.2 アップロードしたspark_test.ipynb
をダブルクリックして開き、'Python' 拡張機能 をインストール
spark_test.ipynb
を開くとPython 言語 用のおすすめ拡張機能 'Python' 拡張機能 提供元: Microsoft をインストールしますか?
というメッセージが右下に表示されますで、「インストール」をクリックしてインストールします。
左側の拡張機能のエクスプローラー部分が「インストール済み」になるまで待ちます
7.3 spark_test.ipynb
タブをクリックしてspark_test.ipynb
を再度表示し、 右上の「カーネルの選択」をクリックし、拡張機能を導入
しばし待つと拡張機能の候補をインストールまたは有効にする Python + Jupyter
というドロップダウンが、上部の「カーネルの選択」の下に表示されますので、そこをクリックします。
もしセットされない場合は、Python環境をクリックして、baseとついてるものを選択してください。
これでJupyter Notebookが実行できるようになりました!
8. Jupyter Notebookを実行
試しにspark_test.ipynb
を実行してみます。
「全てを実行」をクリックして実行してみます。
2番目のセルでは、スキーマ一覧を表示しています。
あとは新規に.ipynb
の拡張子でファイル作成するか、同じようにnotebookのファイルをドラッグアンドドロップでアップロードして自分のコードを実行してみてください。
9. Python fileを実行
9.1 ダウンロードしたspark_test.py
をSpark Labの左側のエクスプローラーにドラッグアンドドロップでアップロードします
9.2 アップロードしたspark_test.py
をダブルクリックして開きます
9.3 右上の実行アイコンをクリックして実行します
これもスキーマ一覧を表示するコードです。結果はターミナルに表示されます。
いろいろWARNINGは出ますが、最終的にnotebookを実行した時と同じスキーマ一覧が表示されていると思います。
あとは新規に.py
の拡張子でファイル作成するか、同じようにpythonのファイルをドラッグアンドドロップでアップロードして自分のコードを実行してみてください。
10. 作成したファイルのローカルへの保存
環境が消えてしまうとファイルも消えてしまうので、終わる前に必ず残したいファイルはローカルにダウンロードしてください。
エクスプローラー画面から、保存したいファイルを右クリック、「ダウンロード」でダウンロード可能です
11. The Spark user interface (UI)
ローカルでThe Spark user interface (UI) を確認できるようなことがドキュメントには記載されていますが、あまりうまく動かなかったので、サーバー側での確認をお勧めします(2024/8/4現在の情報)
以下のドキュメントを参照の上、Spark history serverのUIで確認してみてください。
Accessing the Spark history server
12. 接続の切断
必要なファイルをローカルに保存したら、セッションを切断します。尚セッションを切断のみならファイルは通常は消えませんが、うまく復活できなかったことがあったので、念の為のローカル保存をお勧めします(長時間使ってない場合は消えるような気がしてます)。
また、切断前にすべてのファイルは閉じておいてください。
右下の青い「SSH: 127.0.0.1:xxxx」をクリックします
上部にドロップダウンが表示されますので、「リモート接続を終了する」をクリックします
13. 2回目以降のSpark Labの起動
左側のアクティビティバーのwatsonx.dataのアイコンをクリックすると、Spark Labのメニューが表示されるので、そこから起動して下さい。
作成済みのものはクリックすると以前と同じ設定、拡張機能もファイルもそのままで起動します。
が、復活しないこともあったので、何度やってもうまくいかない場合は、削除して作り直してください。
マウスカーソルをあてるとゴミ箱アイコンが表示されるので、クリックすると削除できます。
5.Spark Labの作成からやり直してください。
14. その他
デフォルト Spark 構成はサーバー側のSparkの詳細を表示すると表示可能です。これらの構成は設定済みでコード側で設定不要です。
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
以上です。