Kategorien
Digitale Transformation Implementierung

Reporting auf Hana und Hadoop inklusive Delta-Lake

In diesem Artikel wird darauf eingegangen, wie wir Open-Source Software und APIs benutzen um Daten aus verschiedenen Systemen auszulesen und zu visualisieren.

Grundlage hierfür soll das bereits in früheren Blog-Einträgen ( Lambda Architektur: Umsetzung mit Apache Spark, Wechsel von Lambda zur Delta Architektur) beschriebene ETL-Hadoop-Demo-System sein. Wie man in Abbildung 1 sieht sind hier folglich Kafka-Topics, Hana-, Hive- und Delta-Lake-Tabellen beteiligt. Ziel ist es, die Daten aus allen involvierten Systemen abzugreifen und nahe Echtzeit auf einem Dashboard grafisch darzustellen.

Auswahl der Lösung

Dazu wurden zunächst verschiedene Lösungen analysiert, um eine für unseren Fall passende zu finden. Erste Kandidat war die SAC (SAP Analytical Cloud), welche den Vorteil bietet, dass Dashboards schnell und unkompliziert erstellt werden können und diese auch mit vielen verschiedenen Datenquellen interagieren können. Jedoch sprechen in unserem Use-Case zwei Gründe gegen diese Lösung. Zunächst ist SAC eine kostenpflichtige Lösung und keine Open Source Software, worauf wir uns in diesem Demo-System konzentrieren wollten. Des Weiteren ist es nicht möglich Daten aus Delta-Lake Tabellen auszulesen, welche aber eine wichtige Komponente unserer ETL-Strecke darstellt.

Als Alternative stand Apache Superset zur Debatte. Dieses Open-Source-Projekt fiel leider auch zum jetzigen Zeitpunkt durch, da auch hier keine direkte Möglichkeit besteht direkt auf Delta-Lake-Tabellen zuzugreifen. Außerdem befindet sich das Projekt derzeit noch in der Incubator-Phase und würde daher auch für den produktiven Einsatz nicht in Frage kommen.

Letztendlich wurde sich daher auf eine Kombination aus einem Java Back-End und einem React-Frontend geeinigt. Diese Kombination bietet genügend Flexibilität, die nötig ist, um aus unseren verschiedenen Datenquellen zu lesen und hat zudem eine große Anzahl an ausgereiften Frameworks, um die Entwicklung schnell und zuverlässig zu gestalten.

Der grobe Aufbau des Konzepts ist in Abbildung 1 zu sehen. Das Java-Backend liest unseren Pool an Datenquellen aus und REST bzw. SSE Schnittstellen stellen dem in JacaScript/React geschriebenen Frontend die im Backend-Cache zwischengespeicherten Daten zur Verfügung. Auf dieses Frontend kann dann mittels eines Browsers zugegriffen werden.

Abbildung 1 Datenquellen die vom Java-Backend aufgerufen und bereitgestellt werden. Über SSE und REST können Clients die Daten abrufen

Details zum Backend

Um die Daten aus den unterschiedlichen Quellen leichter erreichbar zu machen, wurde sich wie bereits erwähnt für ein Java-Backend entschieden. Dieses cached in bestimmten, konfigurierbaren Zeitintervallen, die Datensätze aus dem Kafka Topic und den Hive, Delta-Lake- und Hana Tabellen. Somit ist zwar eine Verzögerung bei der Darstellung nicht zu vermeiden, jedoch entlastet dies die Datenbanken, da auch mehrere Clients die Daten gleichzeitig abrufen können, ohne eine zusätzliche Query abzusetzen. Außerdem wird dadurch die Reaktionsgeschwindigkeit bei der Abfrage deutlich gesteigert.

Für die verschiedenen Quellen wurden Konnektoren geschrieben, welche auf die jeweils notwendige API zugreifen, um Datenabfragen zu erstellen. Für die Hana-Tabellen wurde dabei auf einen JDBC-Treiber zurückgegriffen. Auch Hive wurde mit Hilfe eines JDBC-Treibers angebunden, jedoch nutzen wir hier nicht Hive direkt, sondern die Query-Engine Impala. Diese ermöglicht eine weit schnellere Bereitstellung der Daten. Für Kafka wurde ein Kafka-Consumer implementiert und um die Delta-Lake Tabellen auslesen zu können, mussten wir auf eine lokale Spark Session zurückgreifen. Eine andere Möglichkeit wäre hier Presto gewesen, das aber auf dem hier genutzten System nicht zur Verfügung stand.

Auf die im Cache gehaltenen Datensätze kann nun ein Client in Form eines Browsers oder eines Frontends über REST oder SSE (Server Send Event) zugreifen.

Da wir im vorgestellten Use Case mit Streaming arbeiten, sollen die Daten möglichst schnell auch beim Konsumenten ankommen. In unserem Fall wäre dies das React-Dashboard. Hier soll nicht nochmals auf das Polling-Verfahren zurückgegriffen werden, da dies weitere Verzögerung der Darstellung zur Folge hätte. Also wurde sich für eine Anbindung des Frontend an das Backend via SSE entschieden. SSE ist im HTML5 Standard enthalten und lässt den Server Push Nachrichten an einen zuvor angemeldeten Client schicken. Dadurch sind wir in der Lage neue Daten sofort an den Client (hier: das Dashboard-Frontend) zu schicken, sobald neue Daten im Cache vorhanden sind. Es werden also weitere Verzögerungen durch ein getaktetes Aufrufen der REST Schnittstelle umgangen. Für parametrisierte, einzelne Datenbankabfragen stellt das Backend trotzdem weiterhin eine Rest API bereit.

Frontend:

Als Grundgerüst wurde auf das Material-Sense-Dashboard zurückgegriffen, welches jedoch stark modifiziert wurde um, unter anderem JSONs aus SSE Schnittstellen lesen zu können.

Dieses Dashboard nutzt das OpenSource Material-UI Design welches auf Basis von JavaScript/React entwickelt ist. Material-UI bietet eine Vielzahl passender Bibliotheken, wie etwa Recharts, um Daten grafisch darzustellen. Dies bot eine gute Grundlage, um schnell und unkompliziert ein optisch ansprechendes und kostenfreies Dashboard zu gestalten welches alle Daten unseres Use Cases, anzuzeigen.

Abbildung 2 Dashboard basierend auf JavaScript/React

Zusammenfassung

In unseren drei Artikeln haben wir gezeigt, wie eine Lambda-Architektur mit Hilfe von Spark und dem Hadoop Ökosystem umgesetzt wurde. Es können also Daten sowohl im Streaming-Verfahren in beinahe Echtzeit verarbeitet und für langwierigere Berechnungen oder Aggregationen kann zusätzlich auf ein Batchverfahren zurückgegriffen werden. Außerdem konnten wir die erstellte ETL Pipeline mit Hilfe der Spark Delta-Lake Erweiterung von delta.io vereinfachen und gleichzeitig neue Funktionalitäten wie der Auditfähigkeit und der Möglichkeit alte Snapshots wiederherzustellen, hinzufügen. Schlussendlich wurden dann die Daten aus den verschiedenen Quellen und Systemen über ein selbstgeschriebenes Java-Backend bereitgestellt und mittels Open Source-Dashboard Lösung auf React Basis dargestellt.

Literatur

https://recharts.org/en-US

https://github.com/alexanmtz/material-sense

https://material-ui.com/

https://create-react-app.dev/

Managing Consultant (Ext.)

Dominik Trosien arbeitet seit 2016 bei der ifb group. Er entwickelte seitdem verschiedene ETL-Pipelines, dazugehörige Tools und Programmbibliotheken mit SAP Business Warehouse, SAP HANA, Hadoop und Spark bei Kunden im Banking und Insurance-Bereich. Sein Schwerpunkt liegt im Bereich der Softwareentwicklung mit ABAP, Scala und Java.