Panta rhei, alles fließt. Oder: Wie migriere ich Daten mit Apache NiFi?

nifi-titel

Die Datenmigration ist ein stets präsentes Thema bei vielen Unternehmen, so sind aktuell viele Kunden z.B. mit der Datenmigration in Cloud-Umgebungen beschäftigt. In diesem Zusammenhang werden auch häufig kommerzielle Datenbanken durch Open-Source-Varianten abgelöst.

Dabei stellen sich immer wieder die Fragen: Welche Technologien werden benötigt und wie wird das Ganze am besten durchgeführt? Eine Möglichkeit, die in diesem Blog-Artikel vorgestellt wird, ist die Verwendung von Apache NiFi und dem Amazon SCT (Schema Conversion Toolkit) für die Datenmigration.

Auf zu neuen Ufern: Apache NiFi

Apache NiFi, ursprünglich „Niagara Files", wurde im Jahr 2006 von der National Security Agency (NSA) entwickelt, um den Datenfluss zwischen Systemen zu automatisieren. Später, im Jahr 2014, wurde NiFi der Apache Software Foundation zur Verfügung gestellt und weiterentwickelt, um den globalen Datenfluss von Unternehmen zu bewältigen. Apache NiFi ermöglicht dem Benutzer, Daten zwischen Systemen zu versenden, empfangen und weiterzuleiten und darüber hinaus können Daten transformiert werden.

Apache NiFi's browserbasierte Benutzeroberfläche ermöglicht durch die Verwendung vorgefertigter Bausteine, die sich durch Drag-and-Drop konfigurieren und miteinander verbinden lassen, eine Entwicklung automatisierter Dataflows.

Aufgrund der vielfältigen Möglichkeiten dieses Produktes eignet sich Apache NiFi auch für die Migration von Datenbanken. In diesem Blog-Artikel wird ein Beispiel für einen NiFi-Dataflow zum Migrieren von Datenbanktabellen aus einem Datenbankserver (Oracle) in einen anderen Datenbankserver (MySQL) erläutert.

Nichts bleibt wie es ist. Oder: warum Unternehmen DatenbankEN migrieren

Das Daten-Ökosystem eines Unternehmens besteht aus einer Vielzahl von Anwendungen. Oftmals entscheidet sich ein Unternehmen im Laufe der Zeit, die Daten von einem System in ein anderes zu verschieben, wie beispielsweise aus einer Oracle-Datenbank in eine MySQL-Datenbank. Dieser Vorgang wird als Datenbankmigration bezeichnet und kann sich häufig als sehr komplex erweisen. Eine Datenbankmigration durchzuführen kann verschiedenste Gründe haben, wie beispielsweise:
  • die Senkung der Kosten,
  • Leistungsverbesserung,
  • der Umstieg auf eine cloudbasierte Datenbank oder
  • die Zusammenführung von Daten aus mehreren Datenbanken in eine Datenbank zur Vereinheitlichung.

Jede Reise beginnt mit dem ersten Schritt

Der erste Schritt: Konvertierung des Datenbankschemas
Die Schemakonvertierung ohne die Verwendung eines anderen Tools ist generell mit Apache NiFi möglich, jedoch nicht out-the-box. Hierfür muss zunächst ein DDL-Skript geschrieben werden, welches mithilfe des ExecuteScipt-Prozessors in den NiFi Dataflow integriert werden kann, um Tabellen in der Zieldatenbank zu erstellen. Der Prozessor ExecuteScript bietet die Möglichkeit, mittels sechs vordefinierter Programmiersprachen (Python, Groovy, Ruby, Coljure, ECMAScript, Lua) das DDL-Skript in Apache NiFi auszuführen. Im Anschluss kann die Datenübertragung durchgeführt werden. Dieses Vorgehen stellt jedoch einen Aufwand dar, der umgangen werden kann.

Aus diesem Grund nutzen wir für die Schemakonvertierung ein anderes Tool. Hierfür stellt sich das AWS Schema Conversion Tool (AWS SCT) als sehr geeignet heraus, welches ein vorhandenes Datenbankschema von einer Datenbank-Engine in eine andere konvertiert. Über die AWS-SCT-Benutzeroberfläche kann das zu konvertierende Schema einer Datenbank ausgewählt und in die Zieldatenbank konvertiert werden. In diesem Fall wurde ein Schema von Oracle in MySQL konvertiert.

Schemakonvertierung mithilfe des AWS Schema Conversion Tools

Der zweite Schritt: Der Datenfluss
Um in Apache NiFi Daten zwischen Datenbanken zu verschieben, muss zunächst eine Datenbankverbindung mit der Quell- und Zieldatenbank hergestellt werden. Hierfür müssen in den Controller-Services zwei Database Connection Pools (DBCP) erstellt und die jeweiligen Datenbankparameter, wie die URL und Benutzerdaten, angegeben werden.

Konfiguration des DBCP für Oracle

Nachdem die Datenbankverbindungen hergestellt wurden, können die einzelnen Prozessoren auf die Datenbank zugreifen, um Daten zu extrahieren und in die Zieldatenbank zu laden.
Der folgende NiFi-Dataflow für die Datenmigration lässt sich in drei Schritte unterteilen.

Darstellung des Dataflows für die Datenbankmigration

Der dritte Schritt: Auflistung der Datenbanktabellen
Um die Datenbanktabellen zu erhalten und diese für den weiteren Ablauf verwenden zu können, werden die folgenden zwei Prozessoren verwendet:

ListDatabaseTables: Mithilfe dieses Prozessors können die zu migrierenden Tabellen ermittelt werden. Hierzu wird das Schema angegeben, aus dem die Tabellen extrahiert werden sollen. Der Prozessor erstellt für jede Tabelle ein sogenanntes FlowFile. Dieses enthält wichtige Attribute wie den Tabellennamen und das Tabellenschema der Quelldatenbank. Auf die Attribute der FlowFiles kann im weiteren Verlauf zugegriffen werden.

UpdateAttribute: Der ListDatabaseTables-Prozessor fügt die Tabelleneigenschaften der Quellendatenbank hinzu. Nun müssen mithilfe des UpdateAttribute-Prozessors auch die Eigenschaften der Zieldatenbank hinzugefügt werden. Hierbei werden die Konfigurationen dieses Prozessors um die zwei Attribute db.table.name und db.table.schema der Zieldatenbank erweitert.

Der ListDatabaseTables-Prozessor fügt die Tabelleneigenschaften für das Quellendatenbanksystem hinzu. Verwenden Sie den UpdateAttribute-Prozessor, um die Eigenschaften der Zieldatenbank hinzuzufügen.

Der vierte Schritt: Extrahieren der Daten
In diesem Schritt werden die Daten aus der Quelldatenbank extrahiert. Dies erfolgt mit Hilfe des ExecuteSQL-Prozessors, der per SELECT-Statements die Daten der zuvor aufgelisteten Datenbanktabellen abfragt. 

Der fünfte Schritt: Laden der Daten
Im letzten Schritt werden die Daten, die im vorherigen Schritt aus der Quelldatenbank extrahiert wurden, in die Zieldatenbank migriert. Dies wird mit dem PutDatabaseRecord-Prozessor verwirklicht. Dieser führt Insert-Statements aus und lädt die Daten in die konfigurierte Ziel-Datenbank.

Alles fließt?

Apache NiFi ist ein vielseitiges Werkzeug, das es einem ermöglicht, mit wenigen Klicks unterschiedliche Dataflows zu erzeugen und zu steuern. Mit ein paar wenigen Prozessoren wird, wie hier ausgeführt, die Datenmigration von Oracle in MySQL ermöglicht. Negativ anzumerken ist jedoch, dass es keinen Prozessor gibt, der die Schemakonvertierung automatisch durchführt. Dies würde die Datenmigration mit Apache NiFi deutlich vereinfachen, ohne dass weitere Technologien herangezogen werden müssen. Nichtsdestotrotz bringt Apache NiFi viele Features mit, mit denen unterschiedliche Datenflüsse realisiert werden können. Es ist also zu erwarten, dass Apache NiFi in den nächsten Jahren deutlich an Bedeutung gewinnen wird, denn der Funktionsumfang und das benutzerfreundliche User-Interface wird vermutlich für viele ein Argument sein, Apache NiFi näher zu betrachten.

Haben Sie Fragen zu Apache NiFi oder ETL und/oder Streamings-Technologien, dann sprechen Sie uns an.

By accepting you will be accessing a service provided by a third-party external to https://blog.ordix.de/