🌐

Apache Supersetをインストールしてみる; Pythonの仮想環境構築も兼ねて

2021/01/01に公開

はじめまして, Zenn。初投稿です。
Qiitaと読者層がどう違うのかまだわかっていないので、観測気球的に1本投稿します。ので、すこし古い記事になりますが、あしからず。

Apache Supersetとは

Apache Superset(以降、Superset)とはApache Software Foundation(ASF) incubating projectとして公開されているWEBアプリケーションベースのBIツールです。詳しいことはApache Supersetのサイトに書かれています。

もとは民泊でお馴染みのAirbnbが中心となって開発し、オープンソース化されたものです。ソースを見てわかる通り大半がPythonで実装されています。

本記事での目標

  • Supersetのコンソールにログインして、サンプルデータをDashboardで可視化できるまで

環境

  • CentOS 7.4
  • Python 3.4

Pythonのバージョンはどうする?
いまのところPython 2.x系はCentOS7系で標準インストール(提供)されていますが、Python 3.x系は標準インストールされていないようです。Python 2.xと3.xに互換性はないとされていますので判断を誤ると厳しいことになりそうです。
さらにInstallationをよく見ると次のようにあります(あった)ので、これから新規に使う人はPython3系がよいといえるでしょう。

Superset has deprecated support for Python 2.* and supports only ~=3.6 to take advantage of the newer Python features and reduce the burden of supporting previous versions.

その他

  • pipでインストールします。
  • 2021/1時点ではDockerイメージが提供されており、ドキュメントもDockerイメージでのインストールが大きく書かれているので、敢えてこのような手順は必要ないかと思われます。敢えて困難な手段で挑む、完全に修行勉強モードです。
  • /opt/visual/をインストール先(supersetのホームディレクトリ)として構築します

手順

依存パッケージをインストール

  • そもそも有効なリポジトリがあるかどうかを確認します
# yum repolist

リポジトリー ID               リポジトリー名                      状態
base/7/x86_64               CentOS-7 - Base                   10,019
extras/7/x86_64             CentOS-7 - Extras                 321
updates/7/x86_64            CentOS-7 - Updates          625
repolist: 10,965

なければ/etc/yum.repo/直下に.repoファイルを追加します。

  • Python以外のパッケージをインストールします
# yum install gcc gcc-c++ libffi-devel openssl-devel cyrus-sasl-devel openldap-devel 

インストール:
  cyrus-sasl-devel.x86_64 0:2.1.26-23.el7                 gcc.x86_64 0:4.8.5-36.el7                           
  gcc-c++.x86_64 0:4.8.5-36.el7                           libffi-devel.x86_64 0:3.0.13-18.el7                 
  openldap-devel.x86_64 0:2.4.44-20.el7                   openssl-devel.x86_64 1:1.0.2k-16.el7                

依存性関連をインストールしました:
  cpp.x86_64 0:4.8.5-36.el7                            glibc-devel.x86_64 0:2.17-260.el7                     
  glibc-headers.x86_64 0:2.17-260.el7                  kernel-headers.x86_64 0:3.10.0-957.1.3.el7            
  keyutils-libs-devel.x86_64 0:1.5.8-3.el7             krb5-devel.x86_64 0:1.15.1-34.el7                     
  libcom_err-devel.x86_64 0:1.42.9-13.el7              libkadm5.x86_64 0:1.15.1-34.el7                       
  libselinux-devel.x86_64 0:2.5-14.1.el7               libsepol-devel.x86_64 0:2.5-10.el7                    
  libstdc++-devel.x86_64 0:4.8.5-36.el7                libverto-devel.x86_64 0:0.2.5-4.el7                   
  pcre-devel.x86_64 0:8.32-17.el7                      zlib-devel.x86_64 0:1.2.7-18.el7                      

完了しました!

libsasl2-develについて
CentOS7.4ではlibsasl2-develは標準リポジトリには含まれていないようです。そのため、パッケージ libsasl2-devel は利用できませんと言われることがあります。
Supersetのgithubのフォーラム(Issues)をみたところ、既知の問題として報告されていました。どうやらcyrus-sasl-develを使うことで代用できるようです。

Python3.6をインストール

  • Pythonパッケージを含むリポジトリを追加します。
    ここではEPELリポジトリを使います。
# yum install -y https://centos7.iuscommunity.org/ius-release.rpm

インストール:
  ius-release.noarch 0:1.0-15.ius.centos7       

依存性関連をインストールしました:
  epel-release.noarch 0:7-11                                        

完了しました!
  • インストールできるPythonのうち最新バージョンをインストールします
    インストールできるPythonのバージョンを調べます。
# yum search python3

当時の私の環境では3.6だったので、3.6をインストールします。

# yum install python36u python36u-libs python36u-devel python36u-pip python-wheel

インストール:
  python-wheel.noarch 0:0.24.0-2.el7                     python36u.x86_64 0:3.6.7-1.ius.centos7
  python36u-devel.x86_64 0:3.6.7-1.ius.centos7           python36u-libs.x86_64 0:3.6.7-1.ius.centos7
  python36u-pip.noarch 0:9.0.1-1.ius.centos7            

依存性関連をインストールしました:
  python36u-setuptools.noarch 0:39.0.1-1.ius.centos7  

完了しました!
  • 動作確認をします。
# python --version
Python 2.7.5

# python3.6 --version
Python 3.6.7

プレインストールされていたのはPython 2.7.5なので3.6.7を使いたいときは明示的に指定しないといけないようです。

Python仮想環境を構築

  • まずはPythonの各種ツールを最新版にアップデートします。
  pip3.6 list
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
pip (9.0.1)
setuptools (39.0.1)
You are using pip version 9.0.1, however version 18.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

pipのバージョンが9.0.1です。当時の最新版は18.1なのでアップデートします。

# pip install --upgrade setuptools pip

(抜粋)
Successfully installed pip-18.1 setuptools-40.6.3
  • 仮想環境をインストールディレクトリ(/opt/visual)に構築します。
# mkdir -p /opt/visual/
# cd /opt/
# virtualenv visual/
Using base prefix '/usr'
New python executable in /opt/visual/bin/python3.6
Also creating executable in /opt/visual/bin/python
Installing setuptools, pip, wheel...
done.

これは仮想環境を作成しただけであって、まだ使える状態にはなっていません。アクティベートすることで使用可能な状態になります。

# cd visual/
# . ./bin/activate

(visual) #

プロンプトが変わればOKです。Python仮想化環境内を操作できます。

  • 動作確認します。
(visual) # python --version
Python 3.6.7

期待通り、今回インストールしたPython 3.6.7です。

仮想化環境を終了するときは?
上記のように仮想化環境の操作が有効になっている状態でdeactivateすれば仮想化環境を終了でき、通常のファイルシステムの操作に戻れます。

Supersetのインストール

  • pipでSupersetをインストールします。
(visual) # pip install superset

・・・
Successfully built superset flask-appbuilder flask-compress flower future humanize parsedatetime pydruid pyhive python-geohash pyyaml simplejson sqlalchemy sqlalchemy-utils thrift thrift-sasl unicodecsv billiard Flask-Babel Flask-Login Flask-OpenID alembic tornado geographiclib sasl pycparser Mako python-editor linear-tsv openpyxl et-xmlfile
・・・

続けてSupersetの初期設定をします。

  • Supersetのadminユーザを作成します。
    Supersetの管理者権限を持つユーザを始めに設定します。この類の設定は後で変更可能だと思うので、まずは次のように設定します。
    |プロパティ|値|
    |:--:|:--:|
    | ユーザ名 | admin |
    | パスワード | admin |
    | user firstname | admin |
    | user lastname | user |
(visual) # fabmanager create-admin --app superset --username admin --firstname admin --lastname user --password admin
Email [admin@fab.org]: 
Recognized Database Authentications.
Admin User admin created.

メールアドレスの設定を求められますが、入力しなくてもadminユーザを作成できました。

  • Surpersetを初期化します。
(visual) # superset db upgrade
(visual) # superset load_examples
(visual) # superset init

実行後にかなりの分量のメッセージが出力されますが、エラーのような対処が必要なものはなかったので省略します。

  • Supersetを起動します。
(visual) # superset runserver

・・・
Starting server with command:

コマンドラインの出力は止まりますが、これで問題ありません。

その他
superset runserver -p <port>でポート番号を変更することができますが、今回はデフォルトのまま起動させます。
Installationの通りに-dオプションを付けるとデバッグモードで起動します。
実はSupersetの適切な終了方法がわかりませんが、Ctrl + Cで(強制)終了できます。

Supersetの動作確認

SupersetはWEBベースのBIツールですのでブラウザで操作できます。

  • ブラウザでSupersetにログインする。
    localhostの値は各自の環境のものに変更してください。
http://localhost:8088

ユーザ名とパスワードはadminアカウント作成時に設定したものです。

ログインに成功するとDashboardが表示されます。

おわりに

実は去年の冬休みに書いた内容なので、Dockerイメージでインストールする方法を試して記事をアップデートしたいと思います。ASAPで。

Discussion