Suche
Spoon, Pan & Kitchen

Kettle und die Entwicklung eines eigenen Plug-ins

Jens Bleuel

Matt Casters veröffentlichte im Dezember 2005 Kettle als Open-Source-ETL-Tool (Extraktion, Transformation, Laden) und seitdem hat es sich als das weltweit führende Open-Source-Tool in diesem Bereich etabliert. Es besticht durch seine komfortable Benutzeroberfläche, Architektur und Funktionalität. Kettle ist seit Mitte 2006 als Pentaho Data Integration in die Pentaho Suite integriert, kann aber auch als eigenständige Java-Applikation ausgeführt werden.

Kettle (alias Pentaho Data Integration) ist nicht nur ein ETL-Tool, sondern wird auch zur Datenintegration, Enterprise-Information-Integration (EII) und Applikationsintegration/Enterprise-Application-Integration (EAI) eingesetzt. Es enthält ab der Version 2.4 drei Module:

  • Spoon (grafische Benutzeroberfläche zum Erstellen von Transformationen und Jobs)
  • Pan (Ausführung von Transformationen)
  • Kitchen (Ausführung von Jobs).

Im Folgenden werden Kettle und Pentaho Data Integration synonym verwendet.

Abb. 1: Die Benutzeroberfläche Spoon
Jobs und Transformationen

Ein Job kann mehrere Job-Einträge (z.B. Kettle-Transformationen oder auch mehrstufige Sub-Jobs) ausführen. Die Job-Einträge werden über Sprünge (in der engl. Benutzeroberfläche: hops) grafisch verbunden und repräsentieren einen oder mehrere Datenströme. Sie können bedingt (z.B. im Fehler- oder Erfolgsfall) oder unbedingt eingestellt werden und so die entsprechenden nachfolgenden Job-Einträge ausführen. Im Fehlerfall kann z.B. eine E-Mail mit dem Protokoll der letzten fehlgeschlagenen Transformation versendet werden. Jobs können Loops enthalten, jedoch keine Job-Einträge parallel ausführen.

Abb. 2: Beispiel für eine Transformation

In Kettle ist das Prinzip der Datenflussgraph-Architektur umgesetzt: Innerhalb einer Kettle-Transformation gibt es so genannte „Schritte“ (in der engl. Benutzeroberfläche: steps) beispielsweise zum Laden von Tabellendaten, für Filter, Berechnungen etc. Die einzelnen Schritte werden über Sprünge verbunden. Zwischen den Schritten fließt ein Datenstrom, dessen maximale Zeilenanzahl per Parameter eingestellt werden kann.

Transformationen und Jobs werden komplett als Metadaten abgespeichert. Diese Metadaten werden von Kettle analysiert und ausgeführt, es ist also keine Code-Generierung notwendig. Sie werden entweder als XML-Dateien oder in einem Repository in einer Datenbank gespeichert.

Nahezu jede gebräuchliche Datenbank wird über JDBC unterstützt und ist komfortabel über die Liste der Datenbanken abrufbar. Nicht enthaltene Datenbanken (z.B. Progress) können über JDBC-Treiber der Hersteller oder Drittanbieter unkompliziert eingebunden werden.

Abb. 3: Erstellen einer Datenbankverbindung in Kettle
Skalierung

Jeder Schritt wird innerhalb der Java Virtual Machine als eigenständiger Thread gestartet. Besonders rechenintensive Schritte können auch mehrmals gestartet werden, d.h. ein Schritt kann in zwei oder mehreren parallelen Threads laufen. Diese Architektur erlaubt auch den Einsatz in Grids. Optional kann die Priorität der einzelnen Threads von Kettle dynamisch angepasst werden. Es gibt weitere Möglichkeiten der Lastverteilung: So kann eine Transformation auch speziell auf einem anderen „Kettle-Server“ oder Cluster ausgeführt werden. Ebenso können nur bestimmte Abschnitte einer Transformation auf anderen Rechnern ausgeführt werden; dazu wird über TCP/IP eine Socket-Verbindung aufgebaut und die Daten komprimiert übertragen.

Die Partionierung über mehrere Tabellen kann über den Tabellen-Output-Schritt erfolgen, abhängig von Datum oder Angabe der Zieltabelle pro Datenzeile. Die Verteilung über mehrere Datenbanken kann mit einer Distribution der Datenströme oder ab Version 2.4 auch über Datenbank-Cluster, Schemata und entsprechende Partitionierungs-Methoden erreicht werden. Ab der Version 3.0, die aktuell in Entwicklung ist, sind diverse Performance-Optimierungen umgesetzt worden.

Die Architektur von Kettle ist insgesamt sehr offen gehalten und beinhaltet bereits eine Vielzahl von Transformationsschritten. Hervorzuheben sind die verschiedensten Skalierungsmöglichkeiten und speziell für den Data-Warehouse-Einsatz, die Unterstützung der „Slowly Changing Dimensions“ (Kimbal Types I, II and III) und „Junk Dimensions“ zum Laden der Dimensionen und der Stammdatenhistorisierung.

Plug-in-Entwicklung

Kettle unterstützt einen so genannten Plug-in-Mechanismus, mit dem es möglich ist, eigene Transformationsschritte oder Datenanbindungen zu erstellen. Eine Anbindung an SAP oder der Zugriff auf Windows-DLLs über Wrapper-Klassen wurden bereits realisiert. Die Binaries und der Sourcecode können über Sourceforge geladen werden. Der aktuellste Sourcecode befindet sich auf einem Subversion Repository bei Pentaho, ein Beispiel für einen Plug-in (DummyPlugin) und die Grundlagen im Pentaho Wiki zu Kettle.

Nachdem der Sourcecode als Eclipse-Projekt geladen ist, müssen Anwender ggf. die korrekte swt.jar einbinden (im Standard wird die swt.jar für Linux verwendet). Die Main-Klasse für Spoon befindet sich in be.ibridge.kettle.spoon.Spoon (ab 3.0 in org.pentaho.di.ui.spoon.Spoon). Die wichtigsten Klassen finden sich unter

  • be.ibridge.kettle.core (Row klasse)
  • be.ibridge.kettle.core.database
  • be.ibridge.kettle.core.value
  • be.ibridge.kettle.job.entry
  • be.ibridge.kettle.trans.step

Ab der Version 3.0 wurde eine Umbenennung für alle Packages unter be.ibridge.kettle in org.pentaho.di (di=Data Integration) oder org.pentaho.di.ui (ui=User Interface) durchgeführt und Rows werden Aufgrund der Trennung von Daten und Metadaten nur noch als Object-Array dargestellt. Details finden sich im Pentaho Wiki zu Kettle.

Zur Entwicklung eines eigenen Steps können sie einen bestehenden Schritt unter be.ibridge.kettle.trans.step oder den Dummy-Plugin-Schritt analysieren. Sie benötigen minimal vier Klassen, die folgende Interfaces (aus dem Package be.ibridge.kettle.trans.step) implementieren müssen:

  • StepInterface: Basisklasse mit der Funktionalität des Schrittes (zur Vereinfachung können Sie von BaseStep erben).
  • StepMetaInterface: Metadaten, die u.a. die Definition des Schrittes in XML-Dateien oder dem Repository speichert und lädt.
  • StepDataInterface: Daten, die von der Basisklase zur Laufzeit verwendet werden.
  • StepDialogInterface: Dialogklasse für den Benutzer (SWT), um die Metadaten zu editieren.

Diese vier Klassen verpacken Sie in ein jar, fügen eine Grafik und eine XML-Datei hinzu und kopieren diese drei Dateien komfortabel in ein Verzeichnis (ein Beispiel finden Sie in dem Verzeichnis [Kettle]pluginsstepsDummyPlugin). Benötigen Sie weitere jar-Dateien, kopieren sie diese ebenso in das Verzeichnis und referenzieren diese von der plugin.xml-Datei darauf.

Jens Bleuel ist seit 1988  Software-Entwickler und Trainer für Pentaho und arbeitet bereits seit einigen Jahren mit Kettle und im Data-Warehouse- und Software-Entwicklungs-Umfeld.
Geschrieben von
Jens Bleuel
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.