Prestoインストール方法(Presto-Admin版)

## はじめに
公式のPrestoインストール方法は1台ごとノードにデプロイしていました。この方法では1台ごとにプロセスの起動、停止、再起動、コンフィグの変更等を行う必要があるため管理が大変です。
今回はPresto-Adminを使用して[公式ドキュメント](https://prestosql.github.io/presto-admin/docs/current/index.html)に基づき、Prestoをインストールします。Presto-Adminを利用することで、複数ノードを集中管理することができます。

## Prestoとは
並列分散クエリエンジンで、大規模なデータに対してインタラクティブなクエリ処理が得意です。
また`connector`を設定することで、RDBMSを跨いだクエリを実行できます。
例: PostgresSQLのマスターテーブルとHiveのテーブルをJoin

## 環境

### OS, パッケージ

|OS, パッケージ|バージョン|備考|
|------|------|------|
|OS    | CentOS 7.7|　　　|
|Presto-Admin(prestosql)| 2.10| RHEL, CentOS6以上対応 |
|Presto(prestosql)|333 ||
|Presto-cli(prestosql)|333 ||

### ノード

|ホスト名| 台数 |用途|
| --- | --- | --- |
|prestoadmin| 1 |Presto-Admin|
|coordinator | 1 | coordinator |
|worker[01-03]| 3 | worker |


## Presto-Adminのインストール

下記以降の作業はすべて、`prestoadmin`のrootユーザ、またsshはパスワード認証です。


Presto-Adminを`prestoadmin`にインストールします。
ダウンロードリンクは[ここ](https://github.com/prestosql/presto-admin/releases)参照してください。
また、インストール場所を事前に指定する場合は、`PRESTO_ADMIN_CONFIG_DIR`, `PRESTO_ADMIN_LOG_DIR`を環境変数で指定してください。
```shell
cd /root
wget https://github.com/prestosql/presto-admin/releases/download/2.10/prestoadmin-2.10-offline-el7.tar.gz
tar xvf prestoadmin-2.10-offline-el7.tar.gz
cd prestoadmin
./install-prestoadmin.sh
```

インストール後に、`/root/.prestoadmin`, `/root/.prestoadmin/log`のディレクトリが作成されます。

## Prestoクラスタの設定

Prestoクラスタの設定を`/root/.prestoadmin/config.json`に記述します。

```json:config.json
{
  "username": "root",
  "port": "22",
  "coordinator": "coordinator",
  "workers": ["worker[01-03]"],
  "java_home":"<path/to/java/on/presto/nodes>"
}
```

`username`はPresto-Adminがsshで使用するユーザ名です。もし、root以外のユーザを指定する場合はsudo権限が必要です。
`java_home`は各ノードに環境変数`JAVA_HOME`が設定済みの場合は不要です。

## Javaのインストール

[公式ドキュメント](https://prestosql.github.io/presto-admin/docs/current/installation/java-installation.html)では**Jave 8**をインストールしていますが、`Presto: version 333`は**Java 11**以上が必要なので、Java 11のインストールを行います。

```shell
wget https://cdn.azul.com/zulu/bin/zulu11.39.15-ca-jdk11.0.7-linux.x86_64.rpm
./presto-admin package install zulu11.39.15-ca-jdk11.0.7-linux.x86_64.rpm -p {ssh_password}
```

上記のコマンドで、`coordinator`, `worker`にrpmの配布、インストールまで実行します。


## Prestoのインストール

Prestoのrpmをダウンロードして`coordinator`, `worker`にインストール、`/root/.prestoadmin`の設定を配布します。

```shell
wget https://repo1.maven.org/maven2/io/prestosql/presto-server-rpm/333/presto-server-rpm-333.rpm
./presto-admin server install presto-server-rpm-333.rpm　-p {ssh_password}
```

特にエラーなくインストールが完了したら、Prestoを起動します。

```shell
./presto-admin server start -p {ssh_password}
```

## 動作確認

正しく起動できているかpresto-cliを起動して確認します。

```shell
wget https://repo1.maven.org/maven2/io/prestosql/presto-cli/333/presto-cli-333-executable.jar
mv presto-cli-333-executable.jar presto
chmod +x presto
./presto --server coordinator:8080
presto> select * from system.runtime.nodes;
```

## catalogの追加、コンフィグの修正

例えば、Hiveに接続する場合[ここ](https://prestosql.github.io/presto-admin/docs/current/installation/presto-catalog-installation.html)を参考に`/root/.prestoadmin/catalog/hive.properties`を作成します。
その後Presto-Adminを利用してcatalogの追加、Prestoの再起動を行います。

```shell
./presto-admin catalog add hive -p {ssh_password}
./presto-admin server restart -p {ssh_password}
```

また、コンフィグを編集した際は下記のコマンドで反映させます。

```shell
./presto-admin configuration deploy -p {ssh_password}
./presto-admin server restart -p {ssh_password}
```


## 最後に

Presto-Adminをインストールしたノードから、Prestoの`coordinator`, `worker`にssh接続できれば簡単にPrestoをインストールすることができます。