Parallelisierungsmöglichkeiten mit Talend

In Hinsicht auf Talend bedeutet Parallelisierung das parallele Ausführen von Prozessen. Damit können die zur Verfügung stehenden Ressourcen genutzt und die Performance verbessert werden. Bei umfangreichen Prozessen ist die Parallelisierung ein wichtiger Aspekt.
Bevor man mit der Parallelisierung eines Jobs beginnt, sollte man sich allerdings über den einzelnen Talend Job und den dazugehörigen Prozess im Klaren sein. Der Workflow und die Prozessschritte sollten definiert sein. Daraus kann die Kenntnis gewonnen werden, an welchen Stellen eine Parallelisierung überhaupt möglich ist, ohne das Ergebnis des Talend Jobs zu verfälschen oder die erfolgreiche Ausführung gar zu gefährden.
Im Weiteren werden die verschiedenen Möglichkeiten zur Parallelisierung mittels Talend erklärt und anhand von Beispielen gezeigt.

Parallelisierung von SubJob Aufrufen

Mehrere SubJob Aufrufe können in Talend über die Trigger onSubjobOk und onSubjobError miteinander verbunden werden. Dadurch wird eine Reihenfolge der Ausführung dieser SubJobs festgelegt. Es besteht aber auch die Möglichkeit die SubJobs ohne Verknüpfungen in einem Talend Job zu modellieren und mit einer Multi Threaded Execution zu starten. Dadurch werden die SubJobs parallel abgearbeitet. Die Voraussetzung dafür ist, dass die auszuführenden SubJobs keine Abhängigkeiten untereinander besitzen.

Die 4 Subjobs sollen parallel ausgeführt werden und sind alle gleich aufgebaut. Sie enthalten einen Random Number Generation, welcher eine Zahl zwischen 0 und 10 generiert. Der SubJob gibt diese aus und schreibt den Job Namen in die Konsole. Bevor die Ausgabe erscheint wurde ein Sleep eingebaut, welcher entsprechend der generierten Random Number die Zeit an Sekunden wartet.

Im Extra Tab der Job View des MainJobs muss nur noch die Multi Threaded Execution aktiviert werden.

Die Ausführung der 4 SubJobs erfolgt beim Starten parallel. Die Anzahl der Threads (in der Regel wird 1 SubJob in einem Thread bearbeitet) sollte die Anzahl der verfügbaren Prozessoren der Maschine nicht überschreiten, andernfalls muss einer der SubJobs auf die Fertigstellung eines Subjobs warten.

Parallelisierung von Schleifen

Schleifen können in Talend sehr einfach parallelisiert werden, indem diese innerhalb des iterate-Links aktiviert wird.
Dabei muss beachtet werden, dass die Nutzung der globalMap nicht thread-safe ist.

Die grünen Zahlen an der Row zeigen die jeweiligen Statistiken des Threads.

Parallelisierung mit tParalellize (Orchestrierung)

Für das Steuern der parallelen Ausführung von SubJobs in Talend, existiert die Komponente tParallelize. Damit können die Jobs wie gewünscht orchestriert werden.Dies ist sehr nützlich, wenn es mehrere Jobs gibt, welche parallel ausgeführt werden können, aber mindestens ein Prozess existiert, welcher vom Ergebnis dieser abhängig ist.

In diesem Fall werden die ersten 3 SubJobs parallel ausgeführt. SubJob Nummer 4 muss auf die Fertigstellung warten und kann erst danach ausgeführt werden.

Parallelisierung innerhalb bestimmter Komponenten von Talend

Diverse von Talend mitgelieferte Komponenten bieten die Möglichkeit zur Parallelisierung bestimmter Operationen eines Jobs. Dadurch wird die Ausführungsgeschwindigkeit des Jobs erhöht, indem der Datenfluss in mehrere Fragmente zerteilt wird, welche gleichzeitig ausgeführt werden können.
Ein gutes Beispiel dafür ist das parallele Schreiben von Daten mittels einer Datenbank-Output Komponente. Es gilt allerdings zu beachten, dass globale Variablen beim Aktivieren der parallelen Ausführung, nicht mehr genutzt werden können.

Das Schreiben der Daten wird damit in 4 parallele Ausführungen unterteilt. Neben der entsprechenden Komponente wird diese Anzahl grafisch dargestellt.

Parallelisierung von Datenflüssen

Mit Talend ist es auch möglich komplette Datenflüsse zu parallelisieren. Damit kann die Performance gesteigert werden. Um diese Parallelisierungmöglichkeit nutzen zu können wird eine der Platform Versionen oder Big Data Lösungen benötigt.
Diese Art von Parallelisierung wird mittels der Komponenten tPartitioner, tCollector, tRecollector and tDepartitioner realisiert.
Folgende 4 Schritte sind Teile der Parallelisierung:

1. Partitioning : In diesem Schritt werden die Datensätze des Inputs in die gegebene Anzahl an Threads unterteilt
2. Collecting : In diesem Schritt werden die Eingabedatensätze aus den verschiedenen Threads wieder zusammengefügt
3. Departitioning : In diesem Schritt werden die Ausgaben der parallelen Ausführungen der vorherigen Threads mit der Komponente tSortRow gruppiert
4. Recollecting : In diesem Schritt werden die gruppierten Ausgaben gesammelt und anschließend ausgegeben

Im Talend Job sieht die Konfiguration wie folgt aus:

Setzen der Partition Row:

Setzen der Departition Row:

Somit kann der Job parallel ausgeführt werden.

Quellen:
https://help.talend.com/reader/9NRa~CylzTWZ8bFvUjlang/nkucz9pFI6s555qq8fj~9g

Prodato verbindet.

Autor

Patrick Gelbrich
Lead Consultant

patrick.gelbrich@prodato.de