Talend & Apache Spark: technische Grundlagen

Bevor ich ins Customer Success Architect Team wechselte, hatte ich bei Talend schon mehrere Jahre als Support Engineer gearbeitet. Damals fragten mich Kunden immer wieder zur gemeinsamen Nutzung von Talend und Apache Spark. Wenn man an Spark denkt, fällt einem als erstes der Befehl Spark Submit ein, mit dem man Spark Jobs ausführt. So stellt sich natürlich die Frage, wie sich das bei Talend Spark Jobs unterscheidet. In diesem Blog-Post schauen wir uns die angebotenen Apache Spark Modi an, betrachten die von Talend genutzten Modi und beleuchten, wie Talend mit Apache Spark funktioniert.

Einführung in Apache Spark Jobs

Bei Apache Spark kann man zwei verschiedene Jobarten ausführen, Spark Batch und Spark Streaming. Spark Batch Jobs basieren auf einem Batch-Verarbeitungsmodell. Dabei werden Daten, die über eine gewisse Zeit gesammelt werden, zur Verarbeitung an eine Spark Engine weitergeleitet.

Wie der Name schon andeutet, basiert Spark Streaming auf einem Streaming-Modell. Das bedeutet, die Daten werden kontinuierlich an die Spark Engine übermittelt, wo die Verarbeitung in Echtzeit erfolgt. Talend unterstützt die Erstellung von Spark Jobs für beide Jobarten. Je nach Lizenzumfang können Sie im Talend Studio zwischen den Optionen „Big Data Batch“ und „Big Data Streaming“ wählen, um die entsprechenden Jobarten zu erstellen.

Ein tieferer Einblick in Talend und Apache Spark

Bevor wir starten, möchte ich an dieser Stelle einige grundlegende Konzepte vorstellen, die auch im restlichen Blog-Post immer wieder auftauchen:

  • Spark Driver: leitet Ihre Applikation an Spark Master weiter und ist verantwortlich für die Erstellung und Ausführung Ihres Spark Context.
  • Spark Master: Fordert die durch Spark Driver definierten Ressourcen von YARN an und findet die Hosts zur Ausführung Ihres Jobs.
  • Spark Executor: Ein in Worker-Knoten gestarteter Prozess, der Ihren Job im Speicher oder auf Disk ausführt.

Als Erstes schauen wir uns an, wie sich Spark Jobs mit Spark Submit bzw. mit Talend ausführen lassen. Bei Spark Jobs gibt es immer einen „Driver“, der Ihren Spark Job einrichtet und koordiniert. In diesem Fall richtet der Spark Driver die Konfiguration für Ihren Job ein – zum Beispiel die Verbindung zu einem Spark Master oder welche Speicherkapazität Ihren Spark Executors zugeteilt werden soll. Das heißt, Talend initiiert die gleichen Abläufe wie Spark Submit – vorausgesetzt, es ist ein Spark Driver vorhanden, der den Spark Job einrichtet und koordiniert.

Wenn Sie den Befehl Spark Submit aus einem Hadoop-Cluster heraus geben, wird ein Teil der Konfigurationsdaten aus Ihren Cluster-Konfigurationsdateien entnommen. Da Talend Studio nicht permanent auf einem Hadoop-Cluster läuft, müssen wir diese Informationen innerhalb unseres Jobs im Studio bereitstellen, damit klar ist, welche Einstellungen verwendet werden dürfen.

Die innerhalb des Spark Jobs vorgenommenen Datentransformationen finden bei Talend in der Kompilierungsphase statt. Das ist der gleiche Ablauf wie beim Spark Submit Prozess. Ähnlich wie Spark Submit, startet auch Talend den Job als „Driver“ (siehe oben), obwohl der Job dann nicht im Driver ausgeführt wird, sondern über Spark Executors auf Cluster-Ebene. Sobald der Job startet, überwacht Talend den Prozess und bestimmt anhand der Ereignisse auf Hadoop-Cluster-Ebene, wie die Verarbeitung des Jobs voranschreitet. Auch das entspricht dem Ablauf bei Spark Submit.

Wenn Sie Ihren Job über Spark Submit oder einen Talend Job auf Spark ausführen wollen, stehen Ihnen je nach Hadoop-Cluster-Konfiguration drei verschiedenen Modi zur Verfügung. Basierend auf der Spark Dokumentation, handelt es sich um die folgenden drei Modi (http://spark.apache.org/docs/latest/cluster-overview.html):

1. Standalone: In diesem Modus gibt der Spark Driver den Job an einen Spark Master weiter. Auf dem Cluster laufende Spark Executors verarbeiten dabei den Job.

2. YARN Client-Modus: Hier werden die dem Job zugeteilten Spark Worker Daemons innerhalb des YARN Frameworks gestartet und gestoppt. Der Spark Driver wird dabei, wie oben beschrieben, auf demselben System ausgeführt, von dem aus Sie auch Ihren Talend Job ausführen.

3. YARN Cluster-Modus: In diesem Modus laufen Spark Master und Spark Executor innerhalb des YARN Frameworks und starten und stoppen innerhalb des Jobs. In diesem Fall läuft auch der Spark Driver in YARN auf Hadoop-Cluster-Ebene.

Nachdem wir uns die Spark-Modi angesehen haben, lassen Sie uns einen Blick auf die verschiedenen Modi werfen, die in Talend unterstützt werden:

1. Local: In diesem Modus wird ein lokales Spark Framework zur Ausführung des Jobs aktiviert. Dabei wird Ihre lokale Plattform als Spark Master, sowie als Spark Executor genutzt, um die Datentransformationen durchzuführen.

2. Standalone: Wie weiter oben definiert, kontaktiert Talend in diesem Modus den in Ihrem Hadoop Cluster definierten Spark Master und führt dann den Job aus.

3. YARN Client-Modus: Wie ebenfalls bereits definiert, führt hierbei Talend Studio den Spark „Driver“ aus, um Ihren Job vom Ausführungsort aus zu orchestrieren. Anschließend wird der so eingerichtete Job zur Ausführung und Zuteilung der entsprechenden Ressourcen an das YARN Framework weitergeleitet. Dies ist die verfügbare Auswahl für Hadoop Distributionen wie Hortonworks, Cloudera, MapR, Amazon EMR, etc.

4. YARN Cluster: Dieser Modus wird derzeit nur für HDInsight und Cloudera Altus innerhalb von Talend unterstützt. Wie oben ausgeführt, führt Talent in diesem Modus den Spark „Driver“ auf Hadoop-Cluster-Ebene innerhalb von YARN aus.

Antworten auf die Top-3-Fragen zu Talend und Apache Spark:

  • Gibt Talend alle für den Job benötigten Dateien und Verzeichnisse auf einmal an den Spark Master weiter oder werden bestimmte Daten dennoch im Studio ausgeführt?

Antwort: Es werden nicht unbedingt alle Verzeichnisse auf einmal an den Spark Master weitergeleitet. Es besteht immer die Möglichkeit, dass Executors den Spark „Driver“ später kontaktieren, um benötigte Verzeichnisse anzufordern. In diesem Fall wird der „Driver“ noch während der Jobverarbeitung ausgeführt. Er wartet dann, bis der Job abgeschlossen ist und passt den Status entsprechend an. Wie bei jedem Spark Job kann ein Teil der Verarbeitung letztlich aber dennoch auf „Driver“-Seite ausgeführt werden. Hier zwei gute Beispiele: Wenn Sie ein tLogRow in Ihrem Job haben, müssen alle Informationen vom Cluster gesammelt und dann über die Konsole ausgegeben werden. Oder wenn Sie die Komponenten tCacheIn und tCacheOut verwenden, wird der „Driver“ Metadaten dort speichern, wo die Daten abgelegt sind. Das heißt, in diesem Fall unterscheidet sich Talend Studio nicht von Spark Submit

  • Benötige ich eine Speicherkonfiguration, wenn ich eine Datei schreiben will, die nicht in HDFS abgelegt werden soll, sondern lokal im Studio oder auf dem Jobserver?

Antwort: Ja, für den Job ist eine Speicherkonfiguration nötig. Das wird aus Gründen der Jobstabilität empfohlen, und man sollte möglichst für den gesamten Job nur eine Speicherkonfiguration verwenden. Es ist nicht möglich, zwei HDFS-Speicherorte zu verwenden, die sich auf zwei verschiedene Cluster oder Authentifizierungsmethoden beziehen. Verwendet man beispielsweise HDFS und S3, würde das funktionieren. Dass der Job nicht in das lokale Dateisystem schreiben kann, liegt daran, dass die Spark Worker keinen Einblick ins lokale Dateisystem des „Drivers“ haben. Das heißt, auch der Spark „Driver“ öffnet einen Server und sendet die Verzeichnisse zum Cluster. Will man das erreichen, ist es die beste Option, in HDFS eine temporäre Datei zu schreiben und dann über einen DI Job, der tHDFSGet nutzt, die Datei zurück zur lokalen Plattform zu übertragen. Dieses Verhalten unterscheidet sich nicht von Spark Submit.

  • Warum werde ich zur IP-Adresse vom Studio geleitet, wenn ich im Spark Master Web Interface den Tab Environment anklicke?

Antwort: Dieser Tab sollte Sie immer zur IP-Adresse vom Spark Driver führen. Wenn Sie Spark Submit auf dem Cluster ausführen, werden Sie keine Umleitung bemerken, anderenfalls schon. In diesem Fall unterscheidet sich Talend Studio also nicht von Spark Submit.

Hoffentlich konnte ich mit diesen Erläuterungen deutlich machen, dass sich die Ausführung von Jobs auf Talend nicht von Spark Submit unterscheidet. Talend vereinfacht das Programmieren mit Spark, bietet Ihnen die Möglichkeit, Jobs für Spark Batch und Spark Streaming zu schreiben und die von Ihnen erstellten Spark Jobs für Batch und Streaming zu verwenden. Am besten beginnen Sie einfach damit, Spark Jobs mit Talend zu schreiben. So können Sie selbst feststellen, wie einfach sich Jobs im Vergleich zu Ihrem Hadoop-Cluster und/oder Standalone Apache Spark realisieren lassen.

An der Diskussion teilnehmen

0 Comments

Leave a Reply