watsonx.data 1.1.3 で Prestoをマルチノードに変更してみた

# はじめに
watsonx.data をインストールすると Presto エンジンがインストールされます。起動した Presto エンジンはデフォルトではコーディネーターとワーカーが分離していないシングルノード構成のため、様々なワークロードに対応するために、マルチノードに変更する事をお勧めします。
今回はシングルノードの Prestoエンジンを1個のコーディネーターと複数のワーカーに構成変更してみます。

watsonx.data のコンポーネントの変更については下記の文書を参照してください。
[Customizing watsonx.data components](https://www.ibm.com/docs/en/watsonxdata/1.1.x?topic=watsonxdata-customizing-components-in)

## 環境
使用している環境は以下になります。
・Red Hat OpenShift Container Platform 4.12
・マスターノード x 3 + ストレージノード x 3 + ワーカーノード x 5
・各ノードのCPU ：32 vCPU
・各ノードのメモリー：128GB
・IBM Cloud Pak for Data (CP4D) 4.8.4
・IBM watsonx.data 1.1.3

## シングルノード構成の Presto エンジン
watsonx.data インストール直後のシングルノード構成の Presto エンジンは、1つのポッドから構成される1つのステートフルセットで構成されています。

**Prestoのステートフルセットを確認してみます。**
名前に"single"が含まれる1個のステートフルセットが確認できます。
```
$ oc get statefulset | grep presto
ibm-lh-lakehouse-presto-01-single-green        1/1     14m
```
**Prestoのポッドを確認してみます**
名前に"single"が含まれる1個のポッドが確認できます。
```
$ oc get pod | grep presto
ibm-lh-lakehouse-presto-01-single-green-0       1/1     Running     0   14m
```
## 事前準備
Prestoをマルチノードに変更するにあたり、以下の点を決めておく必要があります。

・コーディネーターとワーカーのレプリカ数
watsonx.data 1.1.x では2個以上のコーディネーターを起動する事はできません。構成変更する際に、コーディネーターの数に2以上の数値を指定してもコーディネーターは1個しか起動しません。これは watsonx.data 1.1.x の仕様ですが将来のバージョンで変更されるかもしれません。
ワーカーの数は、実際にPrestoを使用して実行するワークロードに応じて決める必要があります。今回はOCPクラスターのワーカー・ノードの数が5なので、ワーカーの数を5に設定してみます。

・コーディネーターとワーカー割り当てる CPUとメモリー リソース
コーディネーターとワーカーに割り当てる CPU とメモリーは、ワーカーノードのCPUとメモリー、Presto を使用して実行するワークロード、CP4Dのコントールプレーン、watxonx.data 以外のCP4Dのサービスが使用する CPU とメモリーを考慮して決定します。
CPU とメモリーはポッド起動時に要求する値(requests)と最大値(limits)の2つの値を決めておきます。requestsはlimitsと同じかlimitsの値以下に設定する必要があります。

今回は下記の値で構成変更を実施します。

||レプリカ数|CPU<br>(requests)|CPU<br>(limits)|メモリー<br>(requests)|メモリー<br>(limits)|
|---|:---:|:---:|:---:|:---:|:---:|
|コーディネーター|1|2|2|12G|12G|
|ワーカー|5|12|12|48G|48G

構成変更する際に指定するプロパティーと指定する値は以下になります。
シングルノードとマルチノードの切り替えは lakehouseDeploymentType で指定し、デフォルトは singlenode です。

|プロパティー名|値|
|---|:---:|
|lakehouseDeploymentType|multinode|
|presto_coordinator_replicas (*1)|1|
|presto_coordinator_resources_requests_cpu|2|
|presto_coordinator_resources_limits_cpu|2|
|presto_coordinator_resources_requests_memory|12G|
|presto_coordinator_resources_limits_memory|12G|
|presto_worker_replicas|5|
|presto_worker_resources_requests_cpu|12|
|presto_worker_resources_limits_cpu|12|
|presto_worker_resources_requests_memory|48G|
|presto_worker_resources_limits_memory|48G|

*1…最新のマニュアルからは削除されているので省略可能。
## 構成変更手順
### 1.OCPクラスターにログイン
"oc login" コマンドでOCPクラスターにログインします。

### 2.watsonx.data のプロジェクトに変更
作業中のプロジェクトをwatsonx.data がインストールされているプロジェクトに変更します。今回の環境では watsonx.data は 名前スペース wxd にインストールされています。
```
$ export PROJECT_WXD_INST_OPERANDS=wxd
$ oc project ${PROJECT_WXD_INST_OPERANDS}
```
### 3.カスタム・リソースの変更
Presto の構成変更は、watsonx.data の wxdengine カスタム・リソースを変更する事により実施します。
#### ① wxdengine カスタム・リソースの確認
カスタム・リソースの名前が lakehouse-presto-01 である事が確認できます。
```
$ oc get wxdengine
NAME                  VERSION   TYPE     DISPLAY NAME   SIZE      RECONCILE   STATUS    AGE
lakehouse-presto-01   1.1.3     presto   presto-01      small     Completed   RUNNING   31d
```
#### ② wxdengine カスタム・リソースの変更
"oc edit" コマンドで、カスタム・リソースを変更します。"oc patch"コマンドで変更する事もできますが、今回は変更内容が多いため"oc edit"コマンドを使用します。
```
$ oc edit wxdengine/lakehouse-presto-01
```
このコマンドを実行すると、vi や vim と同じテキスト・エディターが起動されて カスタム・リソースを直接編集する事ができます。
今回変更する内容は "spec:" のセクションの中ですので "spec:" で検索するか画面をスクロールして "spec:"のセクションに移動します。
lakehouseDeploymentType プロパティーはデフォルト値の"singlenode"になっていますので、"multinode"に変更します。プロパティー名の後のコロンの後に必ずスペースを1つ入れてください。
続けて今回指定するプロパティーを追加します。予めPC上のテキスト・エディターに内容を写しておき、コピー＆ペーストで張り付けるのが間違えにくくて良いでしょう。
```
lakehouseDeploymentType: multinode
presto_coordinator_resources_requests_cpu: 2
presto_coordinator_resources_limits_cpu: 2
presto_coordinator_resources_requests_memory: 12G
presto_coordinator_resources_limits_memory: 12G
presto_worker_replicas: 5
presto_worker_resources_requests_cpu: 12
presto_worker_resources_limits_cpu: 12
presto_worker_resources_requests_memory: 48G
presto_worker_resources_limits_memory: 48G
```
内容を確認したら":wq"で内容を保管して終了します。
再度 "oc edit" コマンドで、カスタム・リソースを開いてみると、"spec:"の中はアルファベット順に並び替えられていますが問題はありません。

#### ③ ステートフルセットとポッドが再起動するのを待つ
Prestoのシングルノードからマルチノードへの変更、あるいはその逆の場合 watsonx.data のオペレーターがカスタム・リソースが変更された事を検知して、ステートフルセットとポッドを自動的に再起動します。
カスタム・リソースを変更した直後に "watch -n 10 oc get pod | grep presto" コマンドを実行すると Presto のポッドの Status の推移を確認する事ができます。
"Runnnig" から "Terminating" となり、消えてしばらくするとポッドが再起動されます。
全てのポッドが"Running/Ready"になるまで十数分を要しますので辛抱強く待ちます。

## マルチノード構成の Presto エンジン
**Presto のステートフルセットを確認してみます。**
コーディネーターとワーカーのステートフルセットが起動している事を確認できます。
シングルノードのステートフルセットも残っていますが、ポッドの数は0になっています。
```
$ oc get statefulset | grep presto
ibm-lh-lakehouse-presto-01-coordinator-green   1/1     10m
ibm-lh-lakehouse-presto-01-presto-worker       5/5     10m
ibm-lh-lakehouse-presto-01-single-green        0/0     10m
```
**Presto のポッドを確認してみます**
1個のコーディネータと5個のワーカーのポッドがRunning/Ready であることが確認できます。
Running/Ready ではないポッドがある場合は、"oc describe pod" 等で原因を調べて対処する必要があります。
```
$ oc get pod | grep presto
ibm-lh-lakehouse-presto-01-coordinator-green-0                    1/1     Running     0              21h
ibm-lh-lakehouse-presto-01-presto-worker-0                        1/1     Running     0              21h
ibm-lh-lakehouse-presto-01-presto-worker-1                        1/1     Running     0              21h
ibm-lh-lakehouse-presto-01-presto-worker-2                        1/1     Running     0              21h
ibm-lh-lakehouse-presto-01-presto-worker-3                        1/1     Running     0              21h
ibm-lh-lakehouse-presto-01-presto-worker-4                        1/1     Running     0              21h
```
# おわりに
今回は watsonx.data 1.1.3 で、シングルノード構成の Prestoをマルチノード構成に変更する手順を紹介しました。次回以降では watsonx.data 1.1.3 の別のコンポーネントの構成方法について紹介していく予定です。