はじめに
先日、現場でApache SupersetをWindowsにインストールしました。若干沼ってしまったので記事化して整理しておこうと思います。
検証環境
OS: Windows 10 22H2
DB: PostgreSQL 14.9
Python: 3.11.8
(このPC、父から半年以上借りっぱなしかつ放置...)
インストール手順
事前準備
C++ビルド環境の準備
C言語のビルド環境を準備する必要があります。
公式ページにはしれっとgcc(GNU C Compiler)のインストール必要だよ、ってprerequireにかかれているのですが、Windowsの記載はありません。
WindowsではMS社がビルドツールを提供していますのでそれを使用します。まずは下記サイトからインストール用のプログラムをダウンロードします。
これを入れないと、Supersetのpipインストール時にエラー出ます。
具体的にはpython-geohashという関連モジュールで失敗します。
ダウンロードしたインストーラを起動します。
インストールするプログラムをチェックします。
- まずはチェックは、【C++によるデスクトップ環境】にチェック
- 次に下記をチェック。 (おそらくデフォルトでチェックされます)
- MSVC v(番号) - VS 20XX C++ x64/x86ビルド...
- Windows XX SDK (番号)
- Windows用C++ CMakeツール
- ツールのコア機能のテスト - ビルドツール
- C++ AddressSanitizer
ちなみにOSはWindows10ですが、SDKはWindows 11でOKです。
おそらくここのサイトのものだと思われるのですが、きちんと下位バージョンもサポートされています。
インストールした後に再起動します。
Python仮想環境構築
仮想環境の作成とpip, setuptoolsのアップデートを行う。
> cd c:\your\project\path\
> python -m venv superset
> .\superset\Script\Activate.ps1
(venv)> python -m pip install --upgrade setuptools pip
Superset
supersetインストール
(venv)> pip install apache-superset
(venv)> pip install psycopg2-binary
(venv)> pip install python-dotenv
設定ファイルの作成
まずは環境変数を格納するファイル【.env】を作成します。
# 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}'
SQLAlchemyのエンジン用URLを環境変数SUPERSET_DATABASE_URIで作成しています。
次に、supersetの設定ファイルである【superset_config.py】を作成します。
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'
DB作成
Superset情報格納用のDatabaseを作成します。
ちなみに記事内ではPostgreSQLを使用していますが、SQLiteや別のDBでも大丈夫です。
> createdb -U postgres -h localhost --template=template0 superset_config
サービス起動
> 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
起動確認
上記手順が問題なくできていたら無事に立ち上がるはずです。
下記コマンドを実行して立ち上げてみましょう。
(別のPCからもアクセスできるはずです)
(venv)> superset run -h 0.0.0.0 -p 8088 --with-threads --reload --debugger
無事、別PCからアクセスできました。
サービスが問題なく立ち上がっていて、別PCからアクセスできない場合はファイアウォール設定を見直して接続できるようになるかもしれないです。
最後に
こういったサービス系のツールはLinuxやUnix系のOSでないとインストール手順が書かれていないですね。
(あえてWindowsでやる必要がないといえばないのでしょうけど)
手順では簡単にやれているように見えますが、実際にはMS社のBuild Toolsの存在を知らなかったので、この部分で結構手こずりました...
この記事がどなたかのお役に立てば、と思います。