Die Installation ist am einfachsten unter Docker, Kubernetes oder mit PyPi möglich. Letzteres enthält für das Frontend nur die nach dem Build kompilierten Elemente. Nachträgliche Änderungen oder Weiterentwicklungen lassen sich damit nicht und nur schwierig realisieren.
Wir haben uns deshalb für eine Installation von Grund auf aus den Sourcen entschieden. Sie funktioniert für diverse Unix/Linux-Distributionen und Mac OS. Die Einrichtung erfolgt mit dem Python package manager pip und nodejs. Allerdings gibt es beim Build der Applikation eine Reihe nicht vorhersehbarer Hürden, für die leider in der Dokumentation [2] die entscheidenden Hinweise fehlen.
Nach einiger Recherche gelang uns aber die erfolgreiche Einrichtung unter RHEL 8.7 und auch unter Debian/Ubuntu. Dieser Blogbeitrag soll dabei unterstützen die Einrichtungshürden von Apache Superset zu überwinden und einen besseren Start zu ermöglichen.
Vor der Installation - Vorbereitung mit python und nodejs
Diese Anleitung bezieht sich auf die Apache Superset Version 2.1.0 unter RedHat 8.7. Generell ist es ratsam der ständig aktualisierten offiziellen Dokumentation zur Einrichtung zu folgen, um auf dem neuesten Stand zu sein. Die dort aufgelisteten benötigten Softwarepakete müssen installiert werden. Bezüglich Python ist jedoch unbedingt die Version 3.8 zu installieren:
sudo yum install python38
sudo yum install python38-devel
sudo yum install python38-pip
sudo yum install python38-wheel
NodeJS wird in Version 16 benötigt. Installiert wird diese Version beispielsweise als AppStream Modul mit folgendem Befehl:
sudo dnf module install nodejs:16
Danach erstellt man ein Python Virtual Environment wie in der Dokumentation beschrieben und aktiviert es. Abweichend zur Dokumentation werden einige Module in speziellen Versionen benötigt:
pip install sqlparse=='0.4.3'
pip install pillow
pip install marshmallow-enum
Jetzt sind die Vorbereitungen abgeschlossen und die eigentliche Installation von Apache Superset kann beginnen.
Installation Superset mit python
Zunächst muss die aktuelle Version, in unserem Fall 2.1.0, in das oben erstellte Python Virtual Environment herunter geladen und entpackt werden:
cd venv
wget https://dist.apache.org/...
tar -xvzf apache-superset-2.1.0-source.tar.gz
cd apache-superset-2.1.0rc3
Jetzt kann die Installation gestartet werden:
pip install -e .
Diese sollte nach den obigen Ergänzungen und Einrichtung der passenden Python Version 3.8 und Aktualisierung von pip3.8 im Virtual Environment erfolgreich durchlaufen.
Konfiguration von Superset
Als nächstes muss die Superset Konfigurationsdatei editiert werden:
cd ../bin
nano superset_config.py
Hier werden die URL zur mitgelieferten SQLite Demo-Datenbank, der Schlüssel für die session cookies und Verschlüsselung in der Datenbank sowie optionale Sprachen angepasst:
SECRET_KEY = 'your-supersecret-password-123'
SQLALCHEMY_DATABASE_URI = 'sqlite://///home//username//venv//superset.db'
LANGUAGES = {
'de': {'flag': 'de', 'name': 'Deutsch'},
'en': {'flag': 'us', 'name': 'English'},
}
Einrichtung und Konfiguration der Superset Demo-Datenbank
Für die mitgelieferte Demo-Datenbank sind zunächst eine Initialisierung und die Einrichtung eines Admin-User notwendig, bevor die Beispieldaten geladen werden:
cd ../apache-superset-2.1.0rc3/
export FLASK_APP=superset
superset db upgrade
superset fab create-admin
Wir haben die Erfahrung gemacht, dass das Laden der Beispieldaten abbricht, weil in einigen Fällen die Anzahl der Datensätze zu groß angesetzt ist. Deshalb muss die Chunksize in einigen Dateien auf 1 geändert werden:
sed -i 's/chunksize=500/chunksize=1/g' $(find ~/superset/apache-superset-2.1.0rc3/superset/examples/. -maxdepth 1 -type f)
sed -i 's/chunksize=50/chunksize=1/g' $(find ~/superset/apache-superset-2.1.0rc3/superset/examples/. -maxdepth 1 -type f)
sed -i 's/CHUNKSIZE = 512/CHUNKSIZE=1/g' $(find ~/superset/apache-superset-2.1.0rc3/superset/datasets/commands/importers/v1/. -maxdepth 1 -type f)
Die Bespieldaten können nun geladen werden:
superset init
superset load_examples
Build des Superset Frontend
Jetzt muss noch das Frontend erstellt werden. Dabei kam es zu einem Fehler beim Download des nodejs-Moduls „puppeteer“. Daher ist folgende Definition wichtig, ohne die der npm build Prozess sonst abbricht:
# Build javascript assets
cd superset-frontend
# skip faulty puppeteer download
# https://devdocs.io/...
export PUPPETEER_SKIP_DOWNLOAD=true
Jetzt wird das Frontend gebaut:
npm ci
npx update-browserslist-db@latest
# try to install currencyformatter.js into plugin\plugin-chart-handlebars
npm install currencyformatter.js --save
npm run build
Fertig! - Start des Superset Servers
Nachdem das Frontend erstellt ist, kann der Superset Server gestartet werden. Der Port (im Beispiel 8088) und die IP (im Beispiel 127.0.0.1) können angepasst werden. Um Superset von außerhalb des Hosts erreichbar zu machen, sollte der Server natürlich nicht an localhost (127.0.0.1) gebunden werden.
cd ..
superset run -p 8088 -h 127.0.0.1 --with-threads --reload --debugger
Es kann vorkommen das Firewallregeln den Zugriff auf die Superset Instanz verhindern, im besonderem bei neu eingerichteten virtuellen Maschinen. Daher ist es sinnvoll, entsprechende Firewall Regeln zu definieren:
sudo firewall-cmd --zone=public --permanent --add-service=http
sudo firewall-cmd --zone=public --permanent --add-port 8088/tcp
sudo firewall-cmd --reload
Mit den oben beschriebenen Hinweisen zur Installation von Apache Superset steht eine moderne Open Source Business-Intelligence Umgebung mit umfassenden Möglichkeiten zur Datenanalyse und Visualisierung zur Verfügung.
Gerne übernehmen wir auch die Ersteinrichtung vor Ort oder Remote gemeinsam mit Ihnen. Profitieren Sie von unserer langjährigen Erfahrung mit analytischen Applikationen und Datenintegration. Kontaktieren Sie uns für ein unverbindliches Gespräch oder lassen Sie uns gemeinsam über die Umsetzung Ihrer fachlichen Anforderungen für einen ersten Business Case sprechen.
Quellen:
[1] https://news.apache.org/foundation/entry/the-apache-software-foundation-announces70
[2] https://superset.apache.org/docs/installation/installing-superset-from-scratch