Datenumzug in die Cloud: Amazon S3

Datenumzug in die Cloud: Amazon S3

  • Eric Higaki
    Eric Higaki joined Talend in 2017 as an Associate Evangelist. In this role, Eric works on the community team to provide technical support and brand awareness. Prior to Talend, Eric worked on the Integration team at the largest protein producing company in the world, while also studying at Colorado State University. Go Rams!

Migration in die Cloud

2018 war das Jahr der Cloud. Immer mehr Unternehmen nutzen Cloud-Technologien. Wenn auch Sie dazugehören, brauchen Sie eine klare Vorstellung davon, wie Sie die Cloud am besten einsetzen. Oft ist eines der größten Probleme der Umzug lokaler Datenbestände in den neuen Cloud-Speicher. Ohne die richtigen Tools beißt man sich da schnell die Zähne aus. Umso schöner, dass es mit Talend auch eine einfache Lösung gibt!
 
Ich stand selbst erst vor der Aufgabe, eine lokale MySQL-Datenbank in unseren Amazon S3-Cloud-Speicher zu migrieren. Anstatt mich mit Apache Sqoop herumzuschlagen, entschied ich mich dafür, einen Job in Talend anzulegen, der immer dann ausgeführt wird, wenn neue Daten in die Cloud migriert werden sollen. Das war nicht nur schneller und ersparte mir viel Zeit, die ich jetzt in die Analyse der neu migrierten Daten stecken kann – es war auch quasi der Anlass für diesen Blog-Artikel. Also, genug der Worte, fangen wir gleich an!

Eine Verbindung erstellen

Wie bei jedem Talend-Job beginne ich mit den Verbindungen. Es geht um eine MySQL-Datenbank, also wähle ich die tMysqlConnection-Komponente. Außerdem verwende ich tS3Connection , um eine Verbindung zum S3-Cloud-Speicher herzustellen. Da bei jedem künftig ausgeführten Job zuerst die Verbindungen zu MySQL und S3 aufgebaut werden müssen, stellen wir beiden Komponenten noch tPrejob voran.

Talend ist ein Tool zur Code-Erzeugung. Mit tPrejob steuere ich, welche Elemente zuerst kompiliert werden, in diesem Fall der Verbindungsaufbau zu den Datenbanken. Nachdem ich die beiden Verbindungskomponenten konfiguriert habe, kann ich tPrejob, tMysqlConnection und tS3Connection – wie im nachfolgenden Screenshot gezeigt – verbinden.

Tabellen laden und ein dynamisches Schema festlegen

So, die Verbindung zu den beiden Speicherplattformen steht und ich kann mich um die Cloud-Migration von MySQL nach Amazon S3 kümmern. Zuerst stelle ich dafür eine Liste aller Tabellen zusammen, die aus der Datenbank verschoben werden sollen. Mit tMysqlTableList und der „WHERE“-Klausel kann ich die gewünschten Tabellen angeben. In diesem Fall möchte ich die Datenextraktion aber auf die Kundentabellen (customer) beschränken.

Die Liste der Tabellen, die übertragen werden sollen, haben wir. Als Nächstes brauchen wir eine Liste mit den Spalten in dieser Tabelle.
 
Eine fantastisch einfache Möglichkeit, Werte aus Komponenten zu exportieren, bietet „tMysql“. Diese globalen Variablen können Daten aus „tMysql“-Komponenten abrufen und anderen Komponenten bereitstellen. In diesem Fall sorgt „((String)globalMap.get(“tMysqlTableList_1_CURRENT_TABLE”))“ dafür, dass die Komponente die Spalten aus den Tabellen abruft, die von der tMysqlTableList-Komponente zusammengestellt werden. In Talend lassen sich globale Variablen ganz einfach abrufen, ohne dass man sie sich merken muss. Dazu gebe ich „tMysql“ ein und drücke Strg + Leer. Schon erscheinen alle globalen „tMysql“-Variablen in einer Liste, aus der ich nur noch auszuwählen brauche.

Als Nächstes füge ich einen tFixedFlowInput ein, um die Spalten „tableName“ und „columnName“ zu erzeugen. Die Werte werden in der „tFixedFlowInput“-Komponente nur dann angezeigt, wenn ich zuvor das Schema für diese beiden Spalten konfiguriert habe. Sobald das Schema definiert ist, kann ich einen Wert für diese Spalten festlegen, in diesem Fall ((String)globalMap.get(“tMysqlTAbleList_1_CURRENT_TABLE”)) für „tableName“ und ((String)globalMap.get(“tMysqlTAbleList_1_COLUMN_NAME”)) für „columnName“.

Wenn ich nach dem Fixed Flow ein tLogRow einfüge, kann ich in der run-Konsole die Namen der Tabellen und Spalten anzeigen, aus denen mein Job Daten abruft. Im Screenshot unten sehen Sie den aktuellen Stand des Jobs.

Als Nächstes wird festgelegt, welches dynamische Schema die Daten verwenden, wenn sie aus der lokalen Datenbank abgerufen werden. Die Bezeichnung weist schon darauf hin: Ein dynamisches Schema ändert sich abhängig von der gelesenen Spalte. Für unseren Job ist es daher unerlässlich.
 
Zur Festlegung des dynamisches Schemas verwende ich eine spannende Komponente namens tSetDynamicSchema. Die hat nicht nur einen sehr bezeichnenden Namen, sondern erlaubt es mir auch, das Schema basierend auf dem Wert in „columnName“ festzulegen. Mit einem dynamischen Schema muss ich nicht mehr jede Tabelle einzeln verschieben, sondern kann mehrere Tabellen auf einmal verschieben.

Daten lesen und in die Tabellen schreiben

Das dynamische Schema steht und ich bin bereit, mit dem dynamischen Typ, der mithilfe der Komponente tSetDynamicSchema erstellt wurde, die Tabellendaten auszulesen. Weil die Daten aus einer lokalen Datenbank stammen, muss ich eine Input-Komponente hinzufügen, die von einer MySQL-Datenbank lesen kann: tMysqlInput. Zuerst bearbeite ich das Schema der tMysqlInput-Komponente, damit diese den dynamischen DB-Typ verwendet. Ich nenne die Spalte für dieses Schema „dynamic_row“, den Typ „Dynamic“ (was auch sonst) und den DB-Typ, „VARCHAR“.

Nachdem das Schema erledigt ist, kann ich mit der Konfiguration der „tMysqlInput“-Komponente fortfahren und sicherstellen, dass die Daten aus der aktuellen Tabelle, wie in tMysqlTableList aufgeführt, gezogen werden.

Die Daten in den Tabellen werden aus der aktuellen Tabelle gelesen. Jetzt müssen sie noch in eine CSV-Datei geschrieben werden. Dazu verwende ich tFileOutputDelimited. Wichtig ist, dass der „File Name“ (Dateiname) dem richtigen Dateipfad folgt.

Puh! Fast fertig. Hier der aktuelle Stand des Jobs.

Dateien in Amazon S3 hochladen

Im aktuellen Zustand liest der Job alle Tabellen mit der Bezeichnung „customer“ und speichert sie als CSV-Dateien in einem definierten Ordner. Die Daten werden aus den Tabellen meiner lokalen Datenbank exportiert. Jetzt müssen sie nur noch ihren Weg nach Amazon S3 finden.
 
Mit tFileList kann ich eine Liste aller Dateien in einem bestimmten Ordner abrufen, in diesem Fall eine Liste aller Tabellen, die ich aus meiner lokalen Datenbank gezogen habe. Dazu gebe ich lediglich das Verzeichnis an, in dem sich die Dateien befinden.

Sobald ich eine Liste aller Dateien habe, kann ich sie in einen meiner S3-Buckets verschieben. Dabei hilft mir die tS3Put-Komponente. Dazu gebe ich „Bucket“, „Key“ und „File“ an. Der „Key“ ist der Name der Datei in S3 und „File“ ist der Name der Datei, die in S3 hochgeladen werden soll.

Damit ist die Konfiguration von tFileList und tS3Put abgeschlossen. Übrig bleiben noch ein paar Optimierungsarbeiten an unserem Cloud-Migration-Job. Erinnern Sie sich noch an die Verbindungen, die ich ganz zu Anfang des Jobs geöffnet habe? Mithilfe von tPostjob, tMysqlClose und tS3Close lassen sich diese Verbindungen bei jeder Ausführung des Jobs wieder schließen. Wie zuvor möchte ich die Kontrolle darüber behalten, was am Ende der Hauptschleife geschieht, deshalb auch die tPostjob-Komponente. Na, das war doch wirklich ein Kinderspiel! Der fertige Job sollte ungefähr so aussehen.

Den Job ausführen

Wenn der Job ausgeführt wird und alles wie geplant funktioniert, sollte die Ausgabe in der run-Konsole wie im nachfolgend gezeigten Screenshot aussehen. Wie Sie sehen können, zeigt die Konsole die Tabelle, die gelesen und geschrieben wird, sowie den zugehörigen Spaltennamen.

Der Job ist fertig und ich kann Tabellen aus der lokalen Datenbank in den Cloud-Speicher verschieben, ohne dass für jede Tabelle mehrere Jobs erforderlich sind oder gar mühsam von Hand programmiert werden müssen. Ist es nicht schön, in der Cloud zu sein?

Diese Demo LIVE ansehen

Möchten Sie diese Demo live erleben? Am Donnerstag, den 22. März haben Sie auf der Facebook-Seite fvon Talend Gelegenheit dazu. Für #TalendDevLive werde ich diesen Job Schritt für Schritt nachbauen und beantworte währenddessen gerne all Ihre Fragen. Am besten gleich im Kalender vormerken!

Die beliebtesten Ressourcen

Sie sind sich immer noch nicht ganz sicher, wo Sie beginnen sollen?

An der Diskussion teilnehmen

0 Comments

Hinterlasse eine Antwort

Your email address will not be published. Required fields are marked *