特徴量エンジンKaskadaのインストール

# はじめに

先日、以下の記事を発表しました。

https://qiita.com/yoshiyuki_kono/items/7dc7bdad5e02ff986f5d

新しいテクノロジーに触れる時はいつでも楽しいものです。
中でも新しいプログラミング言語（のパラダイム）を学ぶことは、特別に楽しいことです。

ということで、まだまだ勉強中ですが、公式ドキュメントの学習過程の記録として、以下の記事をまとめてみました。

本稿情報のソースとして、下記ドキュメントを参照ください。

https://kaskada.io/docs-site/kaskada/main/installing.html

Kaskada はイベント処理エンジンとでも呼ぶことができます。
このイベント処理エンジンは、次の 2 つの主要コンポーネントで構成されます。

 - kaskada-engineコンポーネント:イベント データを変換するためのステートフル コンピューティング エンジン
 - kaskada-manager: クライアントと通信するためのステートフル API  (オプションの) 。

## Python で Kaskada を使用する

Kaskada を Python で使用するには、Python バージョン 3.6 以降がインストールされている必要があります。


### pip を使用した Kaskada のインストール
Kaskadaは以下のようにpipコマンドを利用してインストールすることができます。


```
pip install kaskada
```


Kaskada がインストールされました。Kaskada は、ローカル セッションを作成することでローカルで使用できます。

### Python でローカル Kaskada セッションを作成する
```python
from kaskada.api.session import LocalBuilder
session = LocalBuilder().build()
```
ローカル セッションを作成すると、Kas​​kada サービスが、非永続的な Python サブプロセスとして実行されます(初回実行時には、ここで必要なコンポーネントがインストールされます)。

既存の Kaskada プロセスに接続するには、適切なエンドポイントでクライアントを初期化します。

### Python でリモート Kaskada セッションを作成する
```python
from kaskada import client
client.init(
  # The host and port of the Kaskada manager API.
  endpoint = "localhost:50051",

  # If true, TLS encryption will be required for the API connection.
  is_secure = False,

  # An (optional) string identifying the client.
  client_id = "python-client"
)
```
詳細については、Kaskada Python クライアントのドキュメントを参照してください。

https://kaskada.readthedocs.io/en/latest/autoapi/kaskada/index.html

### IPython (Jupyter) で Kaskada を使用する

IPython は、Python コード ブロックを評価するために Jupyter や他のノートブックによって使用される対話型 Python ランタイムです。IPython は、コード ブロックの解釈方法をカスタマイズするための「マジック拡張機能」をサポートしています。Kaskada は、Kaskada のクエリを簡素化するマジック拡張機能を提供します。

Jupyter ノートブック内で Kaskada を使用するには、次のソフトウェアをインストールする必要があります。

 - Python (バージョン 3.6 以降)
 - Jupyter


Kaskada の Python ライブラリには、Fenl 言語でクエリを作成できるだけでなく、クエリの結果をノートブックで受け取ってレンダリングできるようにするノートブックのカスタマイズが含まれています。これらのカスタマイズを使用するには、まずこれらのカスタマイズを有効にする必要があります。

### ノートブックで fenlmagic を有効にする
```
%load_ext fenlmagic
```
これにより、拡張機能が IPython コンテキストにロードされます。

以下のように、ヘルプを表示してみて、インストールが完了したことを確認できます。
```
%%fenl?
  %fenl [--as-view AS_VIEW] [--data-token DATA_TOKEN] [--debug DEBUG]
            [--output OUTPUT] [--preview-rows PREVIEW_ROWS]
            [--result-behavior RESULT_BEHAVIOR] [--var VAR]

fenl query magic

optional arguments:
  --as-view AS_VIEW     adds the body as a view with the given name to all
                        subsequent fenl queries.
  --data-token DATA_TOKEN
                        A data token to run queries against. Enables
                        repeatable queries.
  --debug DEBUG         Shows debugging information
  --output OUTPUT       Output format for the query results. One of "df"
                        (default), "json", "parquet" or "redis-bulk". "redis-
                        bulk" implies --result-behavior "final-results"
  --preview-rows PREVIEW_ROWS
                        Produces a preview of the data with at least this many
                        rows.
  --result-behavior RESULT_BEHAVIOR
                        Determines which results are returned. Either "all-
                        results" (default), or "final-results" which returns
                        only the final values for each entity.
  --var VAR             Assigns the QueryResponse to a local variable with the given
                        name. The QueryResponse contains result_url, query and dataframe.
```
詳細については、Fenlmagic クライアントのドキュメントを参照してください。

## コマンドライン (CLI) で Kaskada を使用する
コマンドラインで Kaskada を使用するには、次の 3 つのコンポーネントをインストールする必要があります。

 - Kaskada コマンドライン実行可能ファイル
 - Kaskada API を提供する Kaskada マネージャー
 - クエリを実行する Kaskada エンジン

これらはそれぞれ、 Kaskada の Github リポジトリのリリースセクションでコンパイル済みのバイナリとして入手できます。この例では、curlがインストールされていることを前提としています。
```shell
curl -s https://api.github.com/repos/kaskada-ai/kaskada/releases/latest |\
grep "browser_download_url.*" |\
grep $(uname -m | sed 's/x86_64/amd64/') |\
grep $(uname -s | tr '[:upper:]' '[:lower:]') |\
cut -d ':' -f2,3 |\
tr -d \" |\
xargs -I {} sh -c 'curl -L {} -o $(basename {}| cut -d '-' -f1,2)'

chmod +x kaskada-*
```
Kaskada コンポーネントの実行を簡素化するには、コンポーネントをパス内のディレクトリに移動します。まず、. 内のディレクトリのコロンで区切られたリストを出力しますPATH。

```shell
echo PATH
```

Kaskada バイナリを、リストされている場所のいずれかに移動します。

次の例こは、バイナリが現在作業ディレクトリにあり、 `/usr/local/binがPATHに含まれていることを前提としています。

```shell
mv kaskada-* /usr/local/bin/
```


### OSX でのアプリケーションの認証
OSX を使用している場合は、アプリケーションのブロックを解除する必要がある場合があります。OSX は、ダウンロードしたアプリケーションがセキュリティ機能として実行できないようにします。次のコマンドを使用して、ファイルのダウンロード時にファイルに配置されたブロックを削除できます。

```shell
xattr -dr com.apple.quarantine <path to file>
```

これで、3 つのコンポーネントすべてを実行できるようになります。これらが正しくインストールされ、実行可能であることを確認するには、次のコマンドを実行してみてください。

```shell
kaskada-cli -h
```

次のような出力が表示されるはずです。
```shell
A CLI tool for interacting with the Kaskada API

Usage:
  cli [command]

Available Commands:
  completion  Generate the autocompletion script for the specified shell
  help        Help about any command
  load        A set of commands for loading data into kaskada
  query       A set of commands for running queries on kaskada
  sync        A set of commands for interacting with kaskada resources as code

Flags:
      --config string               config file (default is $HOME/.cli.yaml)
  -d, --debug                       get debug log output
  -h, --help                        help for cli
      --kaskada-api-server string   Kaskada API Server
      --kaskada-client-id string    Kaskada Client ID
      --use-tls                     Use TLS when connecting to the Kaskada API (default true)
```

マネージャーとエンジンを実行して、Kaskada サービスのローカル インスタンスを開始できます。
```shell
kaskada-manager 2>&1 > manager.log 2>&1 &
kaskada-engine serve > engine.log 2>&1 &
```