Supersetインストール [Windows編]


# はじめに
先日、現場でApache SupersetをWindowsにインストールしました。若干沼ってしまったので記事化して整理しておこうと思います。


# 検証環境
OS: Windows 10 22H2
DB: PostgreSQL 14.9
Python: 3.11.8

![remmina_windows_192.168.11.77_20241127-144333.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/671049/aed74c7d-3baf-7f31-a1ec-ce9661214b11.png)

(このPC、父から半年以上借りっぱなしかつ放置...)



# インストール手順

## 事前準備
### C++ビルド環境の準備
C言語のビルド環境を準備する必要があります。
公式ページにはしれっとgcc(GNU C Compiler)のインストール必要だよ、ってprerequireにかかれているのですが、Windowsの記載はありません。
WindowsではMS社がビルドツールを提供していますのでそれを使用します。まずは下記サイトからインストール用のプログラムをダウンロードします。

https://visualstudio.microsoft.com/ja/visual-cpp-build-tools/

![remmina_windows_192.168.11.77_20241127-145808.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/671049/4ea30b2e-bfe0-498e-1ed0-7584e0d6bc95.png)

:::note warn
これを入れないと、Supersetのpipインストール時にエラー出ます。
具体的にはpython-geohashという関連モジュールで失敗します。
:::

ダウンロードしたインストーラを起動します。

![remmina_windows_192.168.11.77_20241127-145912.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/671049/823b5277-391a-9bc5-b992-ea7394477e8d.png)

![remmina_windows_192.168.11.77_20241127-145920.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/671049/7621277a-5a8a-3d74-b897-9f9d7bff64e1.png)

インストールするプログラムをチェックします。
1. まずはチェックは、【C++によるデスクトップ環境】にチェック
1. 次に下記をチェック。 (おそらくデフォルトでチェックされます)
    1. MSVC v(番号) - VS 20XX C++ x64/x86ビルド...
    1. Windows XX SDK (番号)
    1. Windows用C++ CMakeツール
    1. ツールのコア機能のテスト - ビルドツール
    1. C++ AddressSanitizer

:::note info
ちなみにOSはWindows10ですが、SDKはWindows 11でOKです。
おそらく[ここのサイト](https://developer.microsoft.com/ja-jp/windows/downloads/windows-sdk/)のものだと思われるのですが、きちんと下位バージョンもサポートされています。
![Screenshot from 2024-11-28 00-22-45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/671049/a94d4993-9914-8f8f-71af-071063069511.png)
:::


![remmina_windows_192.168.11.77_20241127-150029.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/671049/84fcae65-537f-1b57-18ae-989cb5b683ce.png)

インストールした後に再起動します。

![remmina_windows_192.168.11.77_20241127-152525.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/671049/f0b5bd35-0042-2c0b-4b76-071b0cf9e891.png)


## Python仮想環境構築
仮想環境の作成とpip, setuptoolsのアップデートを行う。
```powershell
> cd c:\your\project\path\
> python -m venv superset
> .\superset\Script\Activate.ps1
(venv)> python -m pip install --upgrade setuptools pip
```
![remmina_windows_192.168.11.77_20241128-104825.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/671049/505daa1c-e456-35f4-8361-a876ff4d4148.png)

## Superset

### supersetインストール

```powershell
(venv)> pip install apache-superset
(venv)> pip install psycopg2-binary
(venv)> pip install python-dotenv
```
![remmina_windows_192.168.11.77_20241128-105440.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/671049/5fdb7038-00c0-9321-aa90-6a3f81bc3f88.png)

![remmina_windows_192.168.11.77_20241128-110106.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/671049/1bf9f1b4-a6cc-59fb-7cd0-db836e9e9894.png)


### 設定ファイルの作成
まずは環境変数を格納するファイル【.env】を作成します。

```bash
# secret_key
SUPERSET_SECRET_KEY='0123456789'
# db connection info
SUPERSET_DB_PROTOCOL='postgresql+psycopg2'
SUPERSET_DB_NAME='superset_config'
SUPERSET_DB_HOST='127.0.0.1'
SUPERSET_DB_PORT='5432'
SUPERSET_DB_USER='postgres'
SUPERSET_DB_PASS='your db role password'
SUPERSET_DATABASE_URI='${SUPERSET_DB_PROTOCOL}://${SUPERSET_DB_USER}:${SUPERSET_DB_PASS}@${SUPERSET_DB_HOST}:${SUPERSET_DB_PORT}/${SUPERSET_DB_NAME}'
```
![remmina_windows_192.168.11.77_20241128-113616.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/671049/0c8610c7-43a8-b55b-000d-dd234118c0da.png)

SQLAlchemyのエンジン用URLを環境変数SUPERSET_DATABASE_URIで作成しています。

https://docs.sqlalchemy.org/en/20/core/engines.html


次に、supersetの設定ファイルである【superset_config.py】を作成します。

```python
import os
from dotenv import load_dotenv

load_dotenv()

# Superset specific config
ROW_LIMIT = 5000

# Flask App Builder configuration
# Your App secret key will be used for securely signing the session cookie
# and encrypting sensitive information on the database
# Make sure you are changing this key for your deployment with a strong key.
# Alternatively you can set it with `SUPERSET_SECRET_KEY` environment variable.
# You MUST set this for production environments or the server will refuse
# to start and you will see an error in the logs accordingly.
SECRET_KEY = os.getenv('SUPERSET_SECRET_KEY')

# The SQLAlchemy connection string to your database backend
# This connection defines the path to the database that stores your
# superset metadata (slices, connections, tables, dashboards, ...).
# Note that the connection information to connect to the datasources
# you want to explore are managed directly in the web UI
# The check_same_thread=false property ensures the sqlite client does not attempt
# to enforce single-threaded access, which may be problematic in some edge cases
SQLALCHEMY_DATABASE_URI = os.getenv('SUPERSET_DATABASE_URI')

# Flask-WTF flag for CSRF
WTF_CSRF_ENABLED = True
# Add endpoints that need to be exempt from CSRF protection
WTF_CSRF_EXEMPT_LIST = ['']
# A CSRF token that expires in 1 year
WTF_CSRF_TIME_LIMIT = 60 * 60 * 24 * 365

# Set this API key to enable Mapbox visualizations
MAPBOX_API_KEY = ''

# Babel setting
BABEL_DEFAULT_LOCALE = 'en'
BABEL_DEFAULT_TIMEZONE = 'Asia/Tokyo'
```
![remmina_windows_192.168.11.77_20241128-110458.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/671049/8226a023-6e1d-8fc1-eddc-aa66cb7c9f39.png)


### DB作成

Superset情報格納用のDatabaseを作成します。
ちなみに記事内ではPostgreSQLを使用していますが、SQLiteや別のDBでも大丈夫です。

```powershell
> createdb -U postgres -h localhost --template=template0 superset_config
```
![remmina_windows_192.168.11.77_20241128-112643.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/671049/50d0204a-c692-4330-8715-d64418d98247.png)



### サービス起動

```powershell
> cd .\path\to\project\
> .\venv\Script\Activate.ps1
(venv)> $ENV:FLASK_APP='superset'
(venv)> $ENV:SUPERSET_CONFIG_PATH='\path\to\project\superset_config.py'
(venv)> superset db upgrade
(venv)> superset fab create-admin
(venv)> superset load_examples
(venv)> superset init
```

![remmina_windows_192.168.11.77_20241128-113352.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/671049/b8bd7519-3389-eba7-6ea3-6badfcb4f4a5.png)

![remmina_windows_192.168.11.77_20241128-113740.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/671049/b1b2f0a4-228d-0d72-2d76-463e2b4b39a2.png)

![remmina_windows_192.168.11.77_20241128-113927.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/671049/2c0ac778-3abf-c6d2-4e34-d404d82235c4.png)

![remmina_windows_192.168.11.77_20241128-114153.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/671049/9278cec2-d001-3cf1-7f2f-187a501ca820.png)

![remmina_windows_192.168.11.77_20241128-114343.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/671049/73f3139f-0ecf-cf25-daf3-123be451c637.png)




## 起動確認
上記手順が問題なくできていたら無事に立ち上がるはずです。
下記コマンドを実行して立ち上げてみましょう。
(別のPCからもアクセスできるはずです)

```powershell
(venv)> superset run -h 0.0.0.0 -p 8088 --with-threads --reload --debugger
```



無事、別PCからアクセスできました。

![スクリーンショット 2024-11-28 20.47.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/671049/c5157a47-20a6-3cfe-dff3-c337f064c5c3.png)

![スクリーンショット 2024-11-28 20.47.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/671049/1d72dbd5-5e22-7f27-45a7-36eca40a44a1.png)

:::note warn
サービスが問題なく立ち上がっていて、別PCからアクセスできない場合はファイアウォール設定を見直して接続できるようになるかもしれないです。
:::



# 最後に
こういったサービス系のツールはLinuxやUnix系のOSでないとインストール手順が書かれていないですね。
(あえてWindowsでやる必要がないといえばないのでしょうけど)
手順では簡単にやれているように見えますが、実際にはMS社のBuild Toolsの存在を知らなかったので、この部分で結構手こずりました...
この記事がどなたかのお役に立てば、と思います。