Universität Wuppertal, 8.12.2022
Kettle / Pentaho ist ein Produkt von Hitachi Vantara
Der Online-Kurs führt Inhalte aus der Kettle-Grundlagenschulung fort und adressiert folgende Themen
Download Kursmaterial:
git clone https://superx-rocks.de/git/Memtext/Kettle-Schulung.git
Nach dem Download Klonen laden Sie Ihre SQL_ENV, und führen aus:
./rsync_to_h1.x
Damit wird das Modul in Ihrer BI eingespielt.
Unser erster Beispieljob versendet einfach nur eine Mail. Hier eine Gesamtübersicht der Schritte im Job:
Der Job führt nur einen Dummy-Step aus, und verschickt dann eine Mail. Dazu gibt es im Reiter "Design" einen Step:
In dem Dialog im Reiter "Adresses" spezifizieren Sie die Absender- und Empfängeradresse. Danach geben Sie Daten zum Mailserver an:
Unser Beispiel-Mailserver verlangt Zugangsdaten zum Mailversand, diese tippen wir einfach ein. Danach wird Betreff und Inhalt der Mail definiert:
Wir versenden eine einfache Testmail mit voreingestellten Kettle-Protokolldaten. Dann starten wir den Job:
Der Job war erfolgreich, und es müßte tatsächlich eine Mail ankommen:
Damit haben wir ein einfaches Beispiel zum Mailversand abgeschlossen.
Im obigen Beispiel haben wir die Angaben zum Mailversand "hartcodiert" in den Dialog eingetragen. Da es vermutlich mehrere Jobs mit Mailversand gibt, ist es sinnvoll die immer wiederkehrenden Angaben zum Mailserver etc. in Variablen auszulagern. Wir verfeinern also obiges Beispiel, indem wir dem Mailversand eine Transformation vorschalten, die die Variablen definiert und setzt. Hier eine Gesamtübersicht des Jobs:
Da in der Regel solche Angaben in einer Datenbank vorgehalten werden, wählen wir in der Transformation einen Table-Input Step:
Der Step selektiert die jew. Parameter, das Beispiel funktioniert unter Postgres und kann so leicht auf die eigene DB angepaßt werden.
Die Parameter werden dann über den "Set Variables"-Step zur Laufzeit im gesamten Job zur Verfügung gestellt:
Der folgende Dialog zum Mailversand wir dann statt "hartcodiert" mit Verweisen auf die Variablen versehen:
Im folgenden Reiter zum Mailserver sind die Angaben dann analog vorzunehmen. Der Job sollte danach genauso funktionieren wie das erste Beispiel.
Im obigen Beispiel haben wir "sensitive" Angaben zum Mailversand (Benutzername, Passwort) "hartcodiert" in die Datenbank geschrieben. Hier ist es sinnvoll, diese Angaben aus Job und Datenbank herauszunehmen. Kettle bietet die Möglichkeit, zentrale bzw. systemspezifische Variablen in eine Datei "kettle.properties" auszulagern, Details dazu siehe unten.
Das verschlüsselte Passwort und die Zugangskennung wird dann als Variable übergeben.
Das Passwort-Feld ist maskiert, die Eingabe ist
${MAILPW}
Kettle bietet diverse Möglichkeiten zum Logging und zur Fehlerbehandlung:
Das folgende Beispiel zeigt die Nutzung, im Job wird eine Logdatei angelegt, und dann schreiben die einzelnen Transformationen in diese Logdatei. Diese wird dann am Ende per Mail als Anhang verschickt - egal ob es mit Fehler oder erfolgreich war:
Im ersten Schritt wird die Logdatei "ladejob.log" angelegt bzw. geleert, wenn sie schon existiert:
Die erste "Set variables"-Transformation wird im Reiter "Logging" so konfiguriert, dass die Ausgabe in die Logdatei "ladejob.log" geloggt wird.
Ergänzend wollen wir auch die gesamt-Logausgabe des Jobs um eine Zeile erweitern, die die übergebene Mailkennung aus der kettle.properties ausgibt:
Danach wird eine Transformation erstellt, die Postgres-spezifische Systemvariablen
Da diese Operation aus der Datenbank liest und ggf. Fehler bewirken kann, wird neben der normalen Erfolgs-Ausgabe ein "Fehlerkanal" eingerichtet, der eine entsprechende Fehler-Mail verschickt:
Im Reiter "Attached files" wird die Logausgabe des Jobs angehängt:
Unser Job arbeitet von nun an mit einer Fehler- und Logbehandlung.
Mit den "Logleveln" können Sie wählen wie detailliert geloggt wird. Möglich sind:
Kettle Jobs und Transformationen sind XML-Dateien und lassen sich mit Versionskontrollsystemen (z.B. git ) versionieren. Es gibt allerdings ein paar Fallstricke:
Beim Speichern eines Jobs wird immer die Connection mitgespeichert. Daher muss sie vor dem Commit ins git gelöscht werden. Hierzu ist der gesamte Tag sowohl im Job, als auch in den Transformationen zu löschen.
Die Connection-Information in den einzelnen Schritten bleibt jedoch enthalten.
Sie können mit dem Java-Tool Groovy und einem von uns mitgelieferten Script die Connection-Elemente automatisch entfernen. Gehen sie dazu wie folgt vor:
PATH=$PATH:~/tools/groovy/groovy-2.4.10/bin export PATH
Unter Linux:
groovy ~/git/myjobs/scripts/groovy/copy_kettlejob.groovy --strip-connections jobmonitor/jobmonitor.kjb jobmonitor_git
Unter Windows:
groovy Z:\\git\\myjobs\\scripts\\groovy\\copy_kettlejob.groovy --strip-connections jobmonitor\\jobmonitor.kjb jobmonitor_git
Damit werden alle Connection Elemente in dem Job und in den darin aufgerufenen Transformationen entfernt:
Wenn das geklappt hat, können Sie die bereinigten Dateien in den "richtigen" Ordner "jobmonitor" kopieren und versionieren.
Im folgenden zeigen wir wie Sie Jobs "on demand" direkt aus HISinOne oder SuperX im Browser vom Nutzer starten lassen.
Software | Version | Kettle Version |
---|---|---|
HISinOne-BI | ab 2021.06 | Kettle 8.3 |
SuperX | ab Kernmodul 4.9 | Kettle 6.0 |
Ein Kettle Job ohne Eingabeparameter kann in einem eigenen "Mini"-Modul deklariert und über das HISinOne-Jobmanagement ausgeführt werden.
Mit Klick auf das "Installations-"Icon wird es installiert
und danach ist es auch in der Konnektorenübersicht sichtbar, inkl. Unter-Ladejobs:
Die Jobs können dann über das BI Jobmanagement ausgeführt werden.
Auch ein zeitgesteuertes Ausführen ist möglich , per Kommandozeile.
Über die Browser-Oberfläche ist ebenfalls ein zeitgesteuerter Update möglich. Gehen Sie dazu in die Admin-Rolle, und wählen das Menü Administration -> Konfigurationsassistenten:
Ajuf dem Reiter "Business Intelligence" können Sie den jew. Job markieren und so in die nächtliche Laderoutine aufnehmen:
Weitere Details siehe die Beschreibung des Installationsassistenten bei HIS.
Vorab: Sie müssen die Umgebungsvariable CATALINA_OPTS erweitern:
CATALINA_OPTS="... -DMODULE_PFAD=/var/lib/tomcat9/webapps/superx/WEB-INF/conf/edustore/db/module ..."
Unter Ubuntu Linux liegt das in der Datei
/etc/default/tomcat9
dort die Variable
JAVA_OPTS="... -DMODULE_PFAD=/var/lib/tomcat9/webapps/superx/WEB-INF/conf/edustore/db/module ..."
Danach muss man Tomcat neu starten.
Um den Job im System bekannt zu machen wird ein Eintrag in der Tabelle sx_jobs angelegt. Sie erreichen die Bearbeitung über das Menü Administration -> Tabelle suchen.
Im Listenformular können Sie neue Jobs anlegen, oder vorhandene ändern.
Hier unser Beispiel:
Das Ergebnis des Prüfprotokolls erscheint nach Ausführen des Jobs im Ladeprotokoll. Hier können Sie z.B. die Anzahl der Datensätze in einer Zieltabelle zählen.
:
Die Masken, welche Ladejobs ausführen benötigen zwingend das Feld dokettlejob. Anhand dieses Feldes wird dem System mitgeteilt, dass ein Kettle-Job auszuführen ist. Das Feld darf versteckt werden.
:
Um die auswählbaren Kettle-Jobs zu definieren wird auf die Tabelle sx_jobs zugegriffen.
Die Maske kann nach den vorhandenen SuperX-BI-Techniken mit speziellen Benutzer- und Gruppenrechten versehen werden. Auch neue Maskenfelder sind möglich, diese werden automatisch als Parameter an den Job übergeben (sofern der Kettle-Job den Parameter kennt).
Der Ladejob bietet eine einfache Browser-Oberfläche:
In der Maske wählen Sie den Ladejob, dies ist ein Pflichtfeld. Mit dem Abschicken wird der Job gestartet, und der oben definierte Test-SQL im Sinne einer "vorher-nachher"-Messung abgesetzt.
Kitchen dient der Ausführung von Kettle Jobs via Kommandozeile. Wichtig ist die Umgebung, in der Kitchen gestartet wird.
Zunächst ist es wichtig, das Home-Verzeichnis von Kettle beim Aufruf von Kitchen zu kennen. Standardmäßig liegt das Verzeichnis in HOME/.kettle, also unter Linux (3 Varianten):
$HOME/.kettle ~/.kettle /home/Benutzername/.kettle
und unter Windows ( 2 Varianten):
C:\users\Benutzername C:\Documents and Settings\{Benutzername}\.kettle
Im Home-Verzeichnis von Kettle werden Konfigurationsdateien gesucht. Sie können das Home-Verzeichnis auch variieren, indem Sie die System-Umgebungsvariable KETTLE_HOME setzen.
Im Home-Verzeichnis wird nach zwei Dateien gesucht:
Sie können in der Textdatei beliebige Konfigurationen setzen, die Sie nicht in den Jobs / Transformationen oder in der Datenbank speichern wollen, z.B. Zugangsdaten für Email-Server.
Beispielinhalt:
MAILUSER = schulung@superx-projekt.de MAILPW = anfang12
Sie können Passworte sogar verschlüsseln, indem Sie das Kommandozeilen-Tool "encr" nutzen. Unter Linux:
encr.sh -kettle anfang12
Unter Windows:
encr.bat -kettle anfang12
Es wird ein verschlüsseltes Passwort ausgegeben:
Encrypted 2be98afc86aa7f2e4aa17a871d095fe88
Dieses Passwort können Sie dann in die kettle.properties eintragen:
MAILUSER = schulung@superx-projekt.de MAILPW =Encrypted 2be98afc86aa7f2e4aa17a871d095fe88
Speziell für Datenbankverbindungen gibt es eine eigene Datei shared.xml, diese liegt im Homeverzeichnis der Betriebssystem-Benutzerkennung, die den Job startet, im Unterverzeichnis .kettle . Die Datei wird von Spoon angelegt, wenn man eine Connection "teilt" (engl. "share"). Hier ein Beispiel:
Es werden zwei Datenbankverbindungen konfiguriert, die dann in Kettle Transformationen im Element "connection" genutzt werden können.
Die Datenbankverbindungen im jew. Job-Quellcode, bzw. in der Transformation, bzw. in der Kettle Kurs Teil 2 stehen in SuperX bzw. HISinOne-BI in "Konkurrenz" zur "databases.xml" (HISinOne-BI) bzw. zur "db.properties" (SuperX). Hier eine Erläuterung des Zusammenhangs:
Für das im folgenden Abschnitt erläuterte Skript wird eine KETTLE_ENV benötigt, hier ein Beispiel für Ubuntu Linux.
#!/bin/bash KETTLE_PFAD=~/kettle/7.0.0.0-25 export KETTLE_PFAD PENTAHO_JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 export PENTAHO_JAVA_HOME PENTAHO_JAVA=java export PENTAHO_JAVA PATH=$PENTAHO_JAVA_HOME/bin:$PATH export PATH PENTAHO_DI_JAVA_OPTIONS="-Xms1024m -Xmx2048m -XX:MaxPermSize=256m " export PENTAHO_DI_JAVA_OPTIONS
Folgendes Skript führt Kitchen aus, schreibt die Ausgabe in eine Logdatei und sendet bei fehlerhafter Ausführung eine Mail mit der Logdatei im Anhang. Das Beispiel gilt für Ubuntu Linux mit dem Mailclient "s-nail".
#!/bin/bash . ./KETTLE_ENV JOB_PFAD="$MYJOBS_PFAD/etl/jobmonitor" JOB_FILE="jobmonitor_logausgabe" $KETTLE_PFAD/kitchen.sh /file=$JOB_PFAD/$JOB_FILE.kjb /norep >$JOB_PFAD/$JOB_FILE.log 2>&1 if "0" -ne "$?" then # Mailversand echo "Mail wird versandt." echo "Logfile im Anhang." | s-nail -s "Kettle-Job $JOB_FILE.kjb ist fehlgeschlagen!" -a "$JOB_PFAD/$JOB_FILE.log" test@mailserver.de else echo "Job lief ohne Fehler." fi
Zunächst wird KETTLE_PFAD gesetzt, also der Ort, wo Kettle installiert ist. Dann werden der Jobpfad sowie -name übergeben.
Zum Ausführen des Kettle-Jobs durch Kitchen wird im Kettle-Verzeichnis unter Linux kitchen.sh ausgeführt. Über die Option -file werden der Dateipfad und -name übergeben. Die Ausgabe wird in eine Logdatei geschrieben.
$KETTLE_PFAD/kitchen.sh /file=$JOB_PFAD/$JOB_FILE.kjb /norep >$JOB_PFAD/$JOB_FILE.log 2>&1
Abschließend erfolt eine Auswertung des Returncodes. Falls dieser ungleich 0 ist, also einen Fehler jeglicher Art kennzeichnet, wird eine Mail inklusive Logdatei versandt.
if "0" -ne "$?" then # Mailversand echo "Mail wird versandt." echo "Logfile im Anhang." | s-nail -s "Kettle-Job $JOB_FILE.kjb ist fehlgeschlagen!" -a "$JOB_PFAD/$JOB_FILE.log" test@mailserver.de else echo "Job lief ohne Fehler." fi
Neben der Übergabe eines Jobfiles lässt kitchen.sh weitere Optionen zu (s. Kitchen Optionen). Sehr nützlich ist die Übergabe von Parametern für den ausgeführten Job.
./kitchen.sh /file=test.kjb -param:Semester=20222
In diesem Beispiel wird dem Jobparameter Semester der Wert 20222 übergeben. Bei Parametern mit Leerzeichen müssen Sie Anführungszeichen drum herum setzen.
Sie können auch spezielle JVM-Parameter übergeben, java-typisch mit -D vorangestellt.
./kitchen.sh /file:test.kjb -param:Semester=20222 -Dlanguage=de