2019 ビッグデータクラスターを AKS で使う - アプリケーションの展開


今回は こちらの記事 で構築した SQL Server 2019 BDC にアプリケーションを展開します。

アプリケーション

SQL Server 2019 BDC では以下の種類のアプリケーションがサポートされます。

  • R/Python 関数、モデル、およびアプリ
  • MLeap Serving
  • SSIS

アプリケーションはクラスター内に展開され、外部からも内部からも利用ができます。

アプリケーションは spec.yaml という仕様ファイルで展開を定義します。

レプリカ数とプールサイズ

アプリケーションの並列処理をサポートできるよう、レプリカ数とプールサイズを指定します。

  • レプリカ数: ポッドの数
  • プールサイズ: 1 ポッドに含めるアプリケーションの数

以下の場合、1 レプリカあたり N 個のアプリケーションを含むポッドが N 個展開されるため、NxN の並列処理が可能です。

アプリケーションの展開: Python 関数

まずは一番シンプルな Python 関数を展開してみます。

1. 任意のディレクトリで以下コマンドを実行。Visual Studio Code で開く。

azdata app init --name addpy --version v1 --template python
code addpy

2. hello.py を add.py にリネームして、以下コードに差し替え。

add.py
def add(x, y):
    result = x+y
    return result
result=add(x,y)

3. spec.yaml の中身を以下に差し替え。

  • name: アプリケーションの名前
  • version: アプリケーションのバージョン
  • runtime: 言語 (R または Python)
  • src: アプリへのパス
  • entrypoint: 呼び出される関数名
  • replicas: レプリカ数
  • poolsize: プールサイズ
  • inputs: アプリで利用するインプットと型
  • output: アウトプットと型
spec.yaml
#spec.yaml
name: add-app
version: v1
runtime: Python
src: ./add.py
entrypoint: add
replicas: 1
poolsize: 1
inputs:
   x: int
   y: int
output:
   result: int

4. azdata でアプリを展開。

>azdata login -n mssql-cluster 
Username: admin
Password:
>azdata app create --spec ./addpy
Application `add-app/v1` successfully created.

5. 作成状況を確認。

>azdata app list
App                                                Name     State             Version
-------------------------------------------------  -------  ----------------  ---------
https://52.xxx.xxx.xxx:30080/api/v1/app/add-app/v1  add-app  WaitingForCreate  v1

6. アプリケーション展開で作成されるポッドやサービスを確認。

>kubectl get pods
NAME              READY   STATUS    RESTARTS   AGE
app1-xcpv4        2/2     Running   0          17m
appproxy-225bf    2/2     Running   2          5h11m
compute-0-0       3/3     Running   3          5h11m
control-5fpdx     3/3     Running   3          5h26m
conaktroldb-0       2/2     Running   2          5h26m
...
>kubectl get svc app-add-app-v1 
NAME             TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
app-add-app-v1   ClusterIP   10.0.19.82   <none>        8080/TCP   18m
>kubectl get replicasets app1 -n mssql-cluster
NAME   DESIRED   CURRENT   READY   AGE
app1   1         1         1       19m

7. ポッドの詳細を確認。

  • mlserver と fluentbit から構成
  • アプリは APP_DOWNLOAD_URL から取得
>kubectl describe pod app1-xcpv4 -n mssql-cluster
Name:               app1-xcpv4
Namespace:          mssql-cluster
...
Controlled By: ReplicaSet/app1
Containers:
  mlserver:
    Image: mcr.microsoft.com/mssql/bdc/mssql-mlserver-py-runtime:2019-GDR1-ubuntu-16.04
...
    Environment:
...
      APP_DOWNLOAD_URL: https://nmnode-0-0.nmnode-0-svc:50470/webhdfs/v1/system/appdeploy/app-add-app-v1/app.zip?op=OPEN|
...
  fluentbit:
    Image: mcr.microsoft.com/mssql/bdc/mssql-monitor-fluentbit:2019-GDR1-ubuntu-16.04
...
    Requests:
      cpu:     100m
      memory:  100Mi
...
QoS Class: Burstable
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
...

8. ADS から接続して展開されたアプリの zip を確認。

9. azdata で詳細を取得。

>azdata app describe --name add-app --version v1
{
  "input_param_defs": [
    {
      "name": "x",
      "type": "int"
    },
    {
      "name": "y",
      "type": "int"
    }
  ],
  "internal_name": "app1",
  "links": {
    "app": "https://52.xxx.xxx.xxx:30080/api/v1/app/add-app/v1",
    "swagger": "https://52.xxx.xxx.xxx:30080/api/v1/app/add-app/v1/swagger.json"
  },
  "name": "add-app",
  "output_param_defs": [
    {
      "name": "result",
      "type": "int"
    }
  ],
  "state": "Ready",
  "version": "v1"
}

展開したアプリケーションの利用

次に展開したアプリケーションを使ってみます。

azdata から実行

動作しているかを確認するだけなら、 azdata を使う方法が簡単です。

>azdata app run --name add-app --version v1 --inputs x=1,y=2
{
  "changedFiles": [],
  "consoleOutput": "",
  "errorMessage": "",
  "outputFiles": {},
  "outputParameters": {
    "result": 3
  },
  "success": true
}

Open API で利用

SQL Server 2019 BDC で公開されている Cluster Management Service でトークンの取得を行い、Application Proxy でアプリを実行できます。すべてのアプリケーションは run メソッドにパラメーターを引き渡して実行します。

1. ブラウザで azdata app describe で取得した swagger エンドポイントのホスト名と IP アドレスを使って https://:/docs/swagger.json へアクセス。認証情報が聞かれるので、クラスタ構築で使ったアカウントを利用。
※証明書が聞かれた場合はキャンセルをすると認証を聞かれる。

2. 取得した json を Swagger Editor に張り付け。

3. token メソッドがあるので、Postman で token に Post 要求を実行。access_token を取得。

4. 取得したアクセストークンを使って、https://:30778/api/app/add-app/v1/run を実行。本文に入力パラメーターを指定。

Visual Studio Code (VSC) の利用

拡張機能を利用して VSC からも操作が可能です。

参照: Visual Studio Code を使用して SQL Server ビッグ データ クラスターにアプリケーションを展開する方法

拡張機能のインストール

1. 「アプリ展開の拡張機能](https://aka.ms/app-deploy-vscode) より最新の拡張をダウンロード。

2. VSC の 拡張機能より 「...」 をクリックして、「VSIX からのインストール」を選択。

3. ダウンロードした拡張機能を選択してインストール。完了すると拡張一覧に表示される。

BDC へ接続

1. 左ペインに表示される「SQL Server BDC App Explorer」をクリックして、「DEPLOYED APPS」より「Connect to Cluster」をクリック。

2. 認証モードで「Basic」を選択。

3. Host に Cluster Management Service エンドポイントのアドレスをポート付きで指定。

4. ユーザー名とパスワードを入力して、接続完了を確認。展開済のアプリが表示される。

アプリの作成と展開

VSC からアプリの作成と展開ができます。

1. 「New App Template」をクリック。

2. ウィザードに従って、アプリ名、言語をそれぞれ、「Multiplypy」、「Python」を選択。

3. フォルダを指定する画面が出るので、任意のディレクトリを指定。ファイルが展開されることを確認。

4. VSC で作成されたフォルダを開き、hello.py を multiply.py にリネーム。以下コードを張り付け。

multiply.py
def multiply(x, y):
    result = x*y
    return result
result=multiply(x,y)

5. spec.yaml を以下に差し替え。

spec.yaml
#spec.yaml
name: multiply-app
version: v1
runtime: Python
src: ./multiply.py
entrypoint: multiply
replicas: 1
poolsize: 1
inputs:
   x: int
   y: int
output:
   result: int

6. spec.yaml 内に表示されている「Deploy App」リンクをクリック。

7. 展開が完了したら通知が表示される。

アプリのテスト実行

テンプレートで同時に作成された run-spec.yaml を使って実行できます。

1. run-spec.yaml を以下コードに差し替え。

run-spec.yaml
name: multiply-app
version: v1
inputs:
  x: 5
  y: 10

2. コード上に出ている「Run App」をクリック。

3. 結果を確認。

アプリの情報確認

VSC では Swagger やアプリの情報も簡単に表示できます。

アプリの削除

不要になったアプリは azdata や VSC から削除します。

azdata app delete -n add-app -v v1

まとめ

アプリケーションによって SQL Server 2019 BDC の機能を容易に拡張できます。また外部からアクセスする REST エンドポイントを提供できるため、システム統合に非常に便利です。Python 以外にも多くのアプリケーションをサポートしているため、是非色々試してください。

次の記事へ
目次へ戻る

参照

GitHub: sql-server-samples