LoginSignup
23
22

More than 5 years have passed since last update.

BIツール superset をdockerでインストール

Last updated at Posted at 2017-07-01

airbnbが開発したBIツール Apache Superset (incubating) をAWS EC2にdockerで立てたメモ。
AWS EC2 Amazon Linux t2.microで試した。

参考)
supreset GitHub (公式)
https://github.com/ApacheInfra/superset

superset documentation (公式)
https://superset.incubator.apache.org/index.html

関連記事)
http://qiita.com/risuoku/items/618b7d8614325025ab59
http://qiita.com/momota10/items/ee774188f770555238ca
http://qiita.com/hiro_koba/items/65f3e278d86174210776

dockerfile

redashと異なり、現時点(2017.7)では、公式のdockerfileは提供されてない。
公式GitHubに、dockerfileとしてcommunity contributedのリンクがある。
https://github.com/amancevice/superset

そのdockerfileが以下 (一部カスタマイズしてます)

FROM amancevice/pandas:0.19.2-python3

# Superset version
ARG SUPERSET_VERSION=0.18.5

# Configure environment
ENV LANG=C.UTF-8 \
    LC_ALL=C.UTF-8 \
    PATH=$PATH:/home/superset/.bin \
    PYTHONPATH=/home/superset/.superset:$PYTHONPATH \
    SUPERSET_VERSION=${SUPERSET_VERSION}

# Install dependencies & create superset user
RUN apt-get update && \
    apt-get install -y \
        build-essential \
        libsasl2-dev \
        libldap2-dev \
        mariadb-client \
        postgresql-client && \
    pip install \
        flask-mail==0.9.1 \
        flask-oauth==0.12 \
        flask_oauthlib==0.9.3 \
        impyla==0.14.0 \
        mysqlclient==1.3.7 \
        psycopg2==2.6.1 \
        pyhive==0.2.1 \
        pyldap==2.4.28 \
        redis==2.10.5 \
        sqlalchemy-redshift==0.5.0 \
        sqlalchemy-clickhouse==0.1.1.post3 \
        superset==$SUPERSET_VERSION && \
    useradd -b /home -U -m superset && \
    mkdir /home/superset/.superset && \
    touch /home/superset/.superset/superset.db && \
    chown -R superset:superset /home/superset

# Configure Filesysten
WORKDIR /home/superset
COPY superset .
#VOLUME /home/superset/.superset

# Deploy application
EXPOSE 8088
HEALTHCHECK CMD ["curl", "-f", "http://localhost:8088/health"]
ENTRYPOINT ["superset"]
CMD ["runserver -t 300"]
USER superset

timeout 設定

runserverオプションで -t XXをつけると、Sliceのグラフ描画時の
time out時間を拡張できる。
標準設定の場合、45秒でtimeoutしerrorとなるケースでも、
上記設定をしたら、errorが解消された。

docker build & run

上記dockerfileのコピペだけではbuildできない。
以下サイトのリポジトリをcloneしてbuildする
https://github.com/amancevice/superset

git clone https://github.com/amancevice/superset.git

cd superset

docker build -t superset:0.18.5 .

docker run -p 80:8088 --name superset  superset:0.18.5

デーモン起動 & Volume指定の場合は

docker run -d -p 80:8088 -v /home/hoge:/home/superset/.superset --name superset superset:0.18.5

次に、databaseの初期化とadminユーザの設定を行う

docker exec -it superset superset-init

ブラウザでsupersetの画面にログイン

コンテナが正常起動したら、ブラウザで起動したサーバにアクセス。(port 80指定としたが、変更可能)

supersetはpythonのwebアプリケーション用フレームワークであるFlaskをベースに作成されていて、WEBサーバ機能も持っているので、nginxやapacheなどのWEBサーバアプリケーションを別途立てなくても一応使える。
dockerfile内のrunserverコマンドがWEBサーバ機能実行コマンド。

初期化時に設定したID/PWDでログインすればOK

スクリーンショット 2017-07-01 21.43.33.png

dashboard作成

dashboardを作るには以下の順番で行う必要あり

1) Sources/Databaseを登録
2) Tableを設定
3) Sliceを設定
4) Dashboardを作成

sliceはいわゆるグラフで、そのsliceをdashboardに貼り付けるイメージ。
そのsliceの入力元データのdbとtableを事前に設定する。

スクリーンショット 2017-07-01 21.51.17.png

以下がdatabase設定画面。
RDS(Postgresql)であれば、SQLAlchemy URIには
postgresql://[user]:[password]@[IP or Domain]:[port]/[dbname]
のフォーマットで規定する。ほとんどのDBには対応している模様。

スクリーンショット 2017-07-01 21.59.36.png

Sliceの種類が豊富で、GUIだけでビジュアライズが可能。
SQLを規定するSQL Labもある。

スクリーンショット 2017-07-01 21.53.50.png

スクリーンショット 2017-07-01 21.54.02.png

スクリーンショット 2017-07-01 21.54.13.png

スクリーンショット 2017-07-01 21.54.20.png

SQL Lab

通常のSliceでは、ベースとなるテーブルのカラムを組み合わせてのグラフ化だが、
SQL Labを使うと、複数テーブルのJoinなど自由にSQLで抽出した結果をベースに
グラフ化が可能。

sqllab.png
 ※画面イメージはGitHub superset公式より

基本的には、「Sources」-「Databases」メニューでデータベース情報を登録した上で、「SQL Lab」で任意のSQLを実行する。
Databasesの設定では、「Expose in SQL Lab」にチェックを付ける必要あり。

クエリ結果から、「Visualize」ボタンでそのままSlice(グラフ)の作成が可能。

そこで、AWS RDS/Redshiftを利用した環境で、SQL Labでクエリを実行した際に以下の
エラーが出てハマったので記載する。

Failed to start remote query on a worker. Tell your adinistrator to verify the abailability of the message queue

対処は、「Sources」-「Databases」の対象DBの編集画面にて、
「Allow Run Sync」にチェックをして、かつ
「Allow Run Async」のチェックをはずして保存することで実行できるようになった。

データのバックアップ

supersetのデータはSQLite3で管理され、dockerコンテナ内の
/home/superset/.superset/superset.db
に格納される。
Dockerfileでコメントアウトした VOLUMEを有効化すると、
/home/superset/.superset をVOLUMEでマウントし、
ホスト側マウント先が未設定なので、dockerが勝手にマウント先を規定する。

例)
/var/lib/docker/volumes/[volume ID]/_data/

docker inspect コマンドで詳細は確認できる。

docker inspect 実行例

        "Mounts": [
            {
                "Name": "49313286a6f90d4dd5ad4d0222d7eb3a57d53f21f69a254ea56bbfb77517055b",
                "Source": "/var/lib/docker/volumes/49313286a6f90d4dd5ad4d0222d7eb3a57d53f21f69a254ea56bbfb77517055b/_data",
                "Destination": "/home/superset/.superset",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],

なお、任意でホストマウント先を指定しても良い。

VOLUME [コンテナ内部パス] [ホストマウント先パス]

その他

さすがにTableauほど多機能ではないにせよ、
現時点では、AWSのQuicksightより断然イケてる気がする。
オンプレなどクローズドな環境へも容易にインストールできて重宝する。

23
22
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
22