SPSS CADSでジョブのスケジュール実行を行う

SPSS Modelerで作ったストリームをSPSS Collaboration and Deployment Services（略初CADS）でスケジュール実行をしてみます。

* テスト環境
    * SPSS modeler 18.4
    * SPSS CADS 8.4
    * Windows Server 2019

# CADSジョブのスケジュール実行のアーキテクチャー
CADSのジョブのスケジュール実行は以下のようなアーキテクチャーで動きます。
1. CADSのスケジューラがCADSJOBを起動する。
2. CADSJOB内のストリームをCADSのレポジトリから取得して、Modeler Serverで実行する
3. ストリームがModeler Serverで動き、Modeler Server上の入力ファイルを読み、処理結果を出力ファイルに出力する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/9720ac6a-42a0-244a-84b7-8ce7b6d04299.png)

以下の点に注意が必要です。
- ジョブ実行をするためにはModeler Serverが必須です
- 入出力データはModeler Serverから参照できる場所にある必要があります
- ストリームはCADSレポジトリにあらかじめ登録が必要です


# 解説動画（8分）
<iframe width="560" height="315" src="https://www.youtube.com/embed/Q-6hRp3VAAU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>


# ストリーム解説
ここでは「過去センサー故障データ」をつかって、センサーデータから故障を予測するストリームを作りました。
このモデルに「前日センサーデータ」を入力して、「故障予測結果」を出力するというストリームになっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/8e91f2a4-a289-a2a2-0659-8d7afaa07176.png)

「過去センサー故障データ」には各装置の過去のセンサーデータと故障したかどうかのフラグ「故障」が含まれています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/5a71f74f-9ae6-6ff9-ad14-c573314cf8c7.png)

「前日センサーデータ」には各装置の前日分のセンサーデータが含まれています。「故障」フラグは含まれていません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/c1be4006-4c1f-9697-f711-7239701cbc55.png)

「故障予測結果」には、「前日センサーデータ」の情報に加えて「＄R-故障」という故障の予測結果と「＄RC-故障」というその予測の確信度が含まれています。前日のセンサーのデータからこの予測結果が得られました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/dfb8a780-12c2-7758-3b58-cdc30cae7c81.png)

このストリームで、「前日センサーデータ」によって「故障予測結果」を得ることができます。これをスコアリングといいます。ですので、このスコアリングを毎日行えば、毎日故障の可能性のある装置を把握できますので、故障前にエンジニアが点検したり、部品交換をして、計画外停止を最小限に抑えることができます。

# ストリームのCADSレポジトリへの保存
ストリームをスケジュール実行するためには、まず、CADSレポジトリにこのストリームを保存します。

「ファイル」メニューの「格納」＿「ストリームとして格納」を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/5c0dbf9c-2b29-97ba-8186-12f91feaa48a.png)

リポジトリ―サーバーへの接続を行います。CASDレポジトリのURLを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/bed469f2-3c8d-65e2-d00a-1121e2f52d6e.png)

ユーザーIDとパスワードを入力して「OK」で進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/1898687f-cbfc-28c8-3a74-8f8681522d61.png)

CADSレポジトリ内の保存先のフォルダを選びファイル名を指定して「保管」します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/b3549287-6f69-94cc-4321-af72f0171d63.png)

# CADSジョブの作成
CADSレポジトリに保存したストリームをスケジュール実行するには、CADSジョブを作成する必要があります。

CADSの管理クライアントであるDeployment ManagerでCADSレポジトリに接続し、先ほど保存したストリームを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/f1b809fd-b0df-4b42-6e90-321131af2b72.png)

新規にCADSジョブを作成します。
ジョブを保存するフォルダで右クリックして、「新規」＿「ジョブ」を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/04b674b2-a2eb-402a-aaa1-9cccf036116b.png)

名前を付けて「終了」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/bec9b77e-f95d-4c06-6bd9-4654c48dc1d2.png)

ジョブ作成のエディターが開きます。このキャンパスに「装置故障.str」をドラッグアンドドロップします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/09fd76e1-b5ce-74b0-30c7-95657870c512.png)

「装置故障.str」のジョブステップを設定します。
## 「全般」タブ設定
「全般」タブでModelerServerとコンテンツリポジトリ―サーバー（CADSレポジトリ）を選択し、またそれぞれの「ログイン」には各サーバーに接続するためのユーザーとパスワードを登録した「資格情報」を選択します。

また、「オプションの実行」の「枝の実行」で実行したいターミナルノードを選びます。ここでは「故障予測結果.csv」だけを実行したいので、「故障予測結果.csv」を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/f80d629c-bb12-0909-5691-fd08c0a3fe3f.png)

ストリーム内の「故障予測結果.csv」だけを実行するという意味になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/6d0416a7-a10f-efb1-77f0-4ac493915a10.png)

## データファイルの確認
「データファイル」タブに移動して、パスとファイル名を確認します。ストリームから自動的に抽出されますが、CADSでの実行時には違うパスを使う場合にはここで指定します。なおストリームはModeler Serverで実行されるので、このパスはCADSサーバーではなく、Modeler Server上のパスになります。この例だと「C\:data\IOT\装置CADS」の「前日センサーデータ.csv」を読み取って、「故障予想結果.csv」に出力することになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/bb4e5cd2-2a64-d5f0-6d57-5376692290c2.png)

## ジョブステップ通知設定
ジョブステップの失敗通知で、ストリームが失敗した場合にメールを送る設定をします。
「通知」タブに移動して、「ジョブステップの失敗通知の受信者」の「更新」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/516e0ead-7f4d-76ef-865e-62a35ad5eb6d.png)


通知先のEメールアドレスを登録します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/07f52dfb-5f11-a124-e881-2c6896c6e53a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/9dcdd539-640e-91c9-027f-f2f509f6c5ae.png)

登録ができたら、ジョブを保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/d590d0b6-c057-4211-b0f8-ff2b0c07b63d.png)

# ジョブ実行
スケジュール実行を設定する前に、ジョブが正しく動作するかを確認してみます。

## 正常実行
ジョブ実行前に入力ファイル「前日センサーデータ.csv」が配置されているか確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/e464c5e0-777b-3bb2-a0b8-9a6005e686f5.png)

ジョブを右クリックで「ジョブの実行」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/bff0dd85-c947-1117-df14-27db14235155.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/35a9bea6-b8b6-1fe4-87c5-42f99451cbd5.png)

「ジョブ履歴を表示」します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/3cf46be7-8041-91ca-e26c-e5e6e9283793.png)

「ジョブ履歴」のビューが開きます。ステータスが「成功」になっていればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/156fba3e-7bb4-d69c-aab5-ae573c4e8dc3.png)

「故障予想結果.csv」が「C\:data\IOT\装置CADS」に出力されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/e0c7ba65-6320-a50c-b37b-4e6ae683d220.png)

## 異常実行

入力ファイルのファイル名を変えて、わざとエラーを起こしてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/e765a3ac-6c72-e955-552b-d6b65662a4a1.png)

ジョブを実行します。ジョブを選択した状態でツールバーがから実行することもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/823bbb5c-712b-99cd-736f-f4c573a188b9.png)

以下のようなメールが届きます。URLを開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/f20baf8e-6c81-4871-0062-2df29858edf5.png)

ブラウザが開き、Deployment Portalのログインページに飛びますので、ユーザーとパスワードを入力し、ログインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/0b863384-55ce-8065-a18e-6fa802465357.png)

「ログ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/911ddc60-70f0-42d6-63d6-e2ec26bb8282.png)

入力ファイルが見つからなかったことがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/18b61fb7-b82c-08a5-5a35-30611227cd8f.png)



Deployement Managerでも同じようにエラーのログを確認できます。
「ジョブ履歴」ビューに「失敗」ログが記録されます。「装置故障.str_step」のログを右クリックして、ログを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/2b8950f7-9cfd-12cc-785d-bd2655ab2bfa.png)

ログが開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/a6c49be3-7ebc-06b5-3a0e-fcffe8cdede4.png)

# CADSジョブのスケジュール作成

ジョブを選び、右クリックで「新しいスケジュール」＿「時間ベース」を選びます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/21b5f0da-beea-ac18-77a9-eacad3b06039.png)

ジョブを実行するユーザーを「参照」で選びます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/db36abb8-292e-ab41-95f2-be03f159ffbc.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/f9b743c9-f5a0-bbc2-f093-da5f4ed39541.png)

ユーザーを選んだら、「次へ」で進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/a8e9032c-97e6-7916-b812-1fd427f34210.png)

開始時刻を設定し、反復パターンに「日単位」を選び、「終了」します。ここでは毎日「16:00」に実行するというスケジュール設定をしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/630b463e-c690-13b2-1a21-c13cc76461da.png)


ジョブを選び、右クリックで「スケジュールの表示」を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/bba14d2c-96a9-7e9f-894a-5bae3b8e7620.png)

以下のようにスケジュールが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/e1810960-e77d-ea52-d30b-757bb0eaf96b.png)


毎日16:00までに「前日センサーデータ.csv」を「C\:data\IOT\装置CADS」においておけば、「故障予想結果.csv」が出力される設定ができました。

スケジュールが実行されると「前回の実行」「前回の実行ステータス」が更新されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/9117a53c-d9c6-c3f3-ff2c-93efcf8a6524.png)

詳細な履歴は「ジョブ履歴」のビューで確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/1f208beb-a692-5af4-d9b4-8d8a495c3ab0.png)

# 参考
#### ブログで学ぶSPSS_Modeler #10- 異常検知の自動化！CADSの設定を動画でご紹介 | IBM ソリューション ブログ 

https://www.ibm.com/blogs/solutions/jp-ja/learn-modeler-10/