Deployment von Talend Jobs als Docker Image

Talend Jobs lassen sich auf viele verschiedene Weisen ausführen. Sie können im Talend Studio, mittels des Commandline Interface oder auch auf dem Talend JobServer gestartet werden. Doch alle diese Möglichkeiten haben den Nachteil, dass sie abhängig von der jeweiligen Plattform sind und eine installierte Talend Software voraussetzen.
Die generellen Vorteile wie Portabilität, Skalierbarkeit, Isolation und Sicherheit, welche der Einsatz von Docker mit sich bringt, treffen im Zusammenhang mit Talend auch zu. Dadurch können Talend Jobs auf jeder Maschine ausgeführt werden, auf welcher Docker installiert ist. Talend bietet die Möglichkeit, einen Job aus dem Studio in ein Docker Repository zu deployen. In diesem Beitrag wird exemplarisch gezeigt, wie das Deployment in ein lokales und in ein remote repository funktioniert. Anschließend wird gezeigt, wie einfach sich die Docker Images als Container ausführen lassen.
Dieser Blogbeitrag richtet sich damit an alle Talend Entwickler, welche daran interessiert sind, ihre entwickelten Jobs mit den Vorteilen von Docker zu kombinieren.

Was ist Docker und welche Vorteile bringt es in Bezug auf Talend mit sich?

Durch Zuhilfenahme von Containervirtualisierung kann mittels Docker die Isolierung von Anwendungen vorgenommen werden. Diese freie Software wird verwendet, um zum Beispiel den entsprechenden Code und alle Abhängigkeiten, welche dazu gehören in ein Paket zu verpacken. Dafür wird ein Container Image erstellt, welches im Prinzip das Speicherabbild eines Containers darstellt. Dieses portable und schreibgeschützte Image wird anschließend verwendet, um eine aktive Instanz, einen Container, zu starten. Dieser wird gestartet und sobald kein Code mehr ausgeführt wird, automatisch wieder beendet.
Da das allgemeine Prinzip von Docker bekannt ist, wird hier nicht näher darauf eingegangen. Für mehr Details kann dies auf https://docs.docker.com/get-started/overview/ nachgelesen werden.
In Bezug auf Talend kann aus einem Talend Job ein Docker Image erstellt werden und in einem Docker Repository gespeichert werden. Alternativ kann der Job gebaut und in einem beliebigen Docker Repository abgelegt werden.

Aus dem erstellten Talend Docker Image im Repository können beliebig viele Docker Container gestartet werden. Da alle Abhängigkeiten im Container bereits enthalten sind, kann somit der Talend Job auf beliebigen Systemen gestartet werden, ohne dass eine Installation beispielsweise eines Talend Administration Centers vorhanden sein muss.
Im ersten Part wird gezeigt, wie ein Talend Job aus dem Talend Studio als Docker Image in ein Docker Repository gepushed werden kann.

Deployment eines Talend Jobs als Docker Image in ein lokales Repository

Bevor ein Talend Job als Docker Image deployed werden kann, wird ein installiertes Talend Studio, welches dieses Feature unterstützt und ein Docker Repository oder beliebiger Docker Registry Service benötigt. Weiterhin wird ein Talend Job benötigt, aus welchem ein Docker Image erstellt werden kann.
An dieser Stelle wird das Talend 7.3.1 Studio mit einem lokalen Project zum Erstellen von Talend Jobs verwendet.

Für die Verwendung von Docker wird zunächst Docker Desktop unter Windows installiert.
(siehe https://www.docker.com/products/docker-desktop/)

Der Talend Job LOG_OUTPUT_JOB, welcher als Docker Image in Docker Desktop deployed wird sieht wie folgt aus:

Dieser simple Job gibt drei Strings an tLogRow weiter und printed diese in die Ausgabe.
Mit den folgenden Schritten kann dieser als Docker Image in das lokale Docker repository deployed werden:

  1. Build Job über Rechtsklick auf den Talend Job

    2. Auswahl des lokalen Repository und setzen eines Namens für das Docker Image

    3. Starten eines Docker Containers aus dem deployten Docker Image

    4. Container Output Log in Docker Desktop

    5. Status des Containers

Einen Talend Job als Docker Image in ein lokales Repository zu deployen und daraus einen Container zu starten ist also sehr einfach. Im nächsten Abschnitt geht es darum, einen Talend Job aus dem lokalen Talend Studio in ein Remote Repository zu deployen.

Deployment eines Talend Jobs als Docker Image in ein remote Repository

Bevor ein Talend Job als Docker Image in ein Remote Repository deployed werden kann, muss dieses zunächst eingerichtet werden. Dazu wurde unter Windows 10 eine Ubuntu 22.04 LTS Virtual Machine (VM) mittels Hyper-V konfiguriert und gestartet.


cat /etc/os-release

Als Nächstes muss auf der Linux VM Docker installiert werden:
sudo apt install Docker.io

Anschließend ist Docker auf der VM installiert.
sudo docker –version

Für einen ersten Test wird das hello-world Docker Image mit folgendem Befehl gestartet. Da dieses noch nicht vorhanden ist, wird es vor dem Starten zunächst gepullt und anschließend ausgeführt.

sudo docker run hello-world

sudo docker images

Weiterhin ist es notwendig den Port 2375 für eine Connection über TCP zu konfigurieren, damit der Talend Job als Docker Image über TCP auf die Linux Ubuntu VM deployed werden kann. Die Konfiguration kann mit folgenden Schritten vorgenommen werden:

  1. Erstellen eines daemon.json Files im Ordner /etc/docker mit folgendem Inhalt
    {"hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]}
  2. Anpassung des Files /etc/systemd/system/docker.service.d/override.conf[Service] ExecStart=
    ExecStart=/usr/bin/dockerd
  3. Systemd Daemon neu laden
    systemctl daemon-reload
  4. Neustart des Docker Services
    systemctl restart docker.service

Die Konfiguration der Ubuntu VM ist damit abgeschlossen und Talend Jobs können aus dem Talend Studio in diese VM über die Remote Funktion deployed werden.

Dafür müssen folgende Schritte ausgeführt werden:

  1. Rechtsklick auf den Talend Job und Build Job
  2. Vornehmen der Einstellungen zum Deployen in die VM:
    Build Type = Docker Image
    Docker Host = Remote mit tcp://ip-adresse:2375
    Image Name
  3. Mit dem Klick auf Finish wird der Talend Job als Docker Image in die VM deployed
    In der VM sollte dieser dann unter den Docker Images aufgelistet werden.
    sudo docker images

    Mit folgendem Command kann der Talend Job in einem Docker Container gestartet werden.
    sudo docker run local/log_output_job

    An der Ausgabe ist zu erkennen, dass dies einwandfrei funktioniert hat.

FAZIT

Aus dem Talend Studio kann ein Job sehr einfach als Docker Image in ein lokales bzw. ein remote Repository deployed werden. Die Ausführung als Docker Container ist bei beiden Varianten ebenfalls trivial. Auf der jeweiligen Maschine muss kein Talend installiert sein und die Vorteile Portabilität, Skalierbarkeit, Isolation und Sicherheit, welche Docker bietet, können so genutzt werden.

Es gibt auch bereits einige Möglichkeiten zum Deployment bei verschiedenen Cloud-Anbietern. Zwei große bekannte sind zum Beispiel Amazon AWS https://aws.amazon.com/de/ und Google Kubernetes Engine https://cloud.google.com/kubernetes-engine/. Da es dazu Anleitungen von Talend (https://help.talend.com/r/en-US/8.0/data-integration-job-examples/configuring-google-kubernetes-engine) gibt und Accounts bei den Anbietern erforderlich sind, wird hier nicht näher darauf eingegangen.

PRODATO bringt bezüglich Talend langjährige Projekterfahrung mit sich und steht in enger Partnerschaft mit den entsprechenden Technologieherstellern. Bei Fragen bezüglich Talend und dem Einsatz mit Docker stehen wir gerne zur Verfügung.

Quellen:

https://docs.docker.com/get-started/overview/

https://www.thinkartha.com/wp-content/uploads/2020/08/remoteBuild.png

Prodato verbindet.

Autor

Patrick Gelbrich
Lead Consultant

patrick.gelbrich@prodato.de