Hochgradig parallele HPC-Arbeitslasten in Dataflow

Hochgradig parallele Arbeitslasten, auch als Embarrassingly-Parallel-Arbeitslasten bezeichnet, sind in den Finanz-, Medien- und Life-Science-Unternehmen üblich. Bei parallelen Arbeitslasten wie diesen stellen Unternehmen in der Regel einen Cluster aus Rechenknoten bereit. Jeder Knoten kann unabhängige Verarbeitungsaufgaben in einer Konfiguration ausführen, die als Grid-Computing bezeichnet wird. Zur Verarbeitung von Daten für parallele Arbeitslasten können Sie Apache Beam mit Dataflow verwenden. Weitere Informationen über Apache Beam finden Sie im Apache Beam-Programmierhandbuch.

Die Verwendung von Dataflow für hochparallele Arbeitslasten bietet viele Vorteile.

Außerdem bietet Dataflow verschiedene Sicherheitsfunktionen:

Bei diesen Arbeitslasten ist die Verteilung von Daten an Funktionen erforderlich, die über viele Kerne ausgeführt werden. Diese Verteilung erfordert oft hochparallele Lesevorgänge, gefolgt von einem großen Daten-Fan-Out, das von nachgelagerten Systemen aufgefangen wird. Die Kernkompetenzen von Dataflow sind die Verteilung von Batch- und Stream-Arbeitslasten auf Ressourcen sowie die Verwaltung von Autoscaling und dynamischem Arbeitsausgleich auf diesen Ressourcen. Daher werdenLeistung, Skalierbarkeit, Verfügbarkeit und Sicherheitsanforderungen automatisch verarbeitet, wenn Sie Dataflow für Ihre hochparallelen Arbeitslasten verwenden.

Externen Code in Ihre Pipeline einbinden

Apache Beam hat derzeit integrierte SDKs für Java, Python und Go. Viele hoch parallele Arbeitslasten verwenden jedoch Code, der in C++ geschrieben ist. Sie können Dataflow und andere Google Cloud-Dienste verwenden, um C++-Binärdateien (Bibliotheken) als externen Code mit Apache Beam auszuführen. Wenn Sie C++-Binärdateien einbinden, können Sie diese Arten von Arbeitslasten über vollständig verwaltete Dienste nutzen. Außerdem haben Sie so die Möglichkeit, vollständige Pipelines mit einem ausgefeilten gerichteten azyklischen Graphen (Directed Acyclic Graph, DAG) zu erstellen.

Derselbe Ansatz zum Ausführen von C++-Binärdateien ist auch für Code relevant, der in anderen Sprachen geschrieben wurde, wenn Sie eine eigenständige Binärdatei kompilieren.

Hochparallele End-to-End-Pipelines

Mit Dataflow können Sie die Verarbeitung von E/A-Lese-/Schreibvorgängen, Analysen und Aufgabenausgabe in derselben Pipeline ausführen, sodass Sie vollständig parallele Pipelines ausführen können.

Eine hochparallele HPC-Arbeitslast kann beispielsweise die folgenden Schritte enthalten:

  1. Rohdaten aus internen und externen Quellen aufnehmen. Daten können aus unbegrenzten oder begrenzten Quellen stammen. Unbegrenzte Quellen werden meist in begrenzte Quellen umgewandelt, um den für Task Farming verwendeten Technologien gerecht zu werden.

  2. Verarbeiten Sie die Rohdaten vor, sodass sie ein Datenformat und eine Codierung haben, die von der Task-Farming-Komponente verwendet werden können.

  3. Verwenden Sie ein System, um die Berechnungen auf Hosts zu verteilen und Daten aus einer Quelle abzurufen. Die Ergebnisse werden dann für die Nachanalyse materialisiert.

  4. Führen Sie eine Nachanalyse durch, um die Ergebnisse in die Ausgabe umzuwandeln.

Mit Dataflow können Sie alle diese Schritte in einer einzigen Pipeline verwalten und gleichzeitig die Dataflow-Funktionen nutzen:

  • Da ein einzelnes System für alle Phasen verantwortlich ist, benötigen Sie kein externes Orchestrierungssystem, um das Ausführen mehrerer Pipelines zu koordinieren.

  • Bei der Datenlokalisierung müssen Sie die Phasengrenzen nicht explizit materialisieren und dematerialisieren, was die Effizienz erhöht.

  • Durch eine bessere Telemetrie innerhalb des Systems stehen Informationen zur Gesamtzahl der Byte in der Phase zur Verfügung, was zum Entwerfen späterer Phasen hilfreich ist.

  • Wenn sich die Daten im System befinden, werden die Ressourcen beim Autoscaling basierend auf den Datenvolumen skaliert, während sich die Daten durch die Pipelinephasen bewegen.

Die hochparallele Dataflow-HPC-Pipeline verwendet moderne DAG-Ausführungsengines. Alle typischen Pipelineprozesse können in einem einzigen DAG und damit in einer einzigen Dataflow-Pipeline abgeschlossen werden. Sie können einen von Apache Beam generierten DAG verwenden, um die Form der Pipeline zu definieren.

Wenn Sie von einem Task-Farm-System zu einem hochparallelen Workflow migrieren, müssen Sie von Tasks zu Daten wechseln. Ein PTransform enthält ein DoFn mit einer Prozessfunktion, die ein Datenelement entgegennimmt. Der Datenpunkt kann ein beliebiges Objekt mit einem oder mehreren Attributen sein.

Mit einem DAG und einer einzelnen Pipeline können Sie alle Daten im System während des gesamten Workflows laden. Sie müssen keine Daten in Datenbanken oder Speicher ausgeben.

Mit hochparallelen Workflows verwendete Google Cloud-Komponenten

In Grid-Computing-Anwendungen werden Daten an Funktionen verteilt, die auf vielen Kernen ausgeführt werden. Dieser Ansatz erfordert oft hochgradig parallele Lesevorgänge und ist häufig von einem großen Daten-Fan-Out gefolgt, der von nachgeordneten Systemen aufgefangen wird.

Dataflow ist in andere verwaltete Dienste der Google Cloud Platform integriert, die parallele Daten-I/O im großen Maßstab verarbeiten können:

  • Pub/Sub: Spaltenorientierter Speicher zum Zwischenspeichern und Bereitstellen
  • Bigtable: Globaler Dienst zur Aufnahme von Ereignisstreams
  • Cloud Storage: Einheitlicher Objektspeicher
  • BigQuery: Data-Warehouse-Dienst im Petabyte-Bereich

Zusammen bieten diese Dienste eine überzeugende Lösung für hochparallele Arbeitslasten.

Eine gängige Architektur für hochparallele Arbeitslasten, die in der Google Cloud Platform ausgeführt werden, umfasst Folgendes:

  • Den Dataflow-Runner für Apache Beam. Der Runner verteilt die Arbeit an die einzelnen Grid-Knoten in Form eines Verarbeitungsablaufs, der von einem DAG abgeleitet ist. Mit einem einzelnen Apache Beam-DAG können Sie komplexe mehrstufige Pipelines definieren, in denen parallele Pipelinephasen mithilfe von Side Inputs oder Joins zusammengeführt werden können.

  • Cloud Storage. Dieser Dienst stellt einen Speicherort für die C++-Binärdateien bereit. Wenn große Dateien gespeichert werden müssen, wie es zum Beispiel in Medienunternehmen der Fall ist, befinden sich diese Dateien ebenfalls in Cloud Storage.

  • Bigtable, BigQuery und Pub/Sub. Diese Dienste werden als Quellen und als Senken verwendet.

Das folgende Diagramm zeigt die allgemeine Architektur für einen Beispielworkflow.

Architektur einer Grid-Computing-Lösung

Sie können auch andere Speichersysteme verwenden. Einzelheiten entnehmen Sie der Liste der Speichersysteme und Streamingquellen auf der Pipeline-I/O-Seite der Apache Beam-Dokumentation.

Dataflow-Runner für Apache Beam

Mit Dataflow können Sie Ihre Daten sowohl im Streaming- als auch im Batch-Modus transformieren und anreichern. Dataflow basiert auf Apache Beam.

Cloud Storage

Cloud Storage ist ein einheitlicher Objektspeicher, der die Bereitstellung von Livedaten, Datenanalyse, maschinelles Lernen (ML) und Datenarchivierung umfasst. Für hochgradig parallele Arbeitslasten mit Dataflow bietet Cloud Storage Zugriff auf C++-Binärdateien. In einigen Anwendungsfällen ist Cloud Storage auch der Speicherort für Daten, die in der Verarbeitungsphase benötigt werden.

Sie müssen die Leistungsmerkmale von Cloud Storage kennen, um mit den für das Grid-Computing typischen High-Burst-Lasten umgehen zu können. Weitere Informationen zur Datenbereitstellungsleistung von Cloud Storage finden Sie in den Richtlinien für die Anforderungsrate und Zugriffsverteilung in der Dokumentation zu Cloud Storage.

Bigtable

Bigtable ist ein leistungsstarker NoSQL-Datenbankdienst für umfangreiche analytische und operative Arbeitslasten. Bigtable ergänzt Dataflow. Die Hauptmerkmale von Bigtable, Lese- und Schreibvorgänge mit niedriger Latenz (6 ms beim 90. Perzentil), ermöglichen die Verarbeitung vieler Tausender gleichzeitiger Clients und Heavy-Burst-Arbeitslasten. Diese Features machen Bigtable in der Verarbeitungsphase von Dataflow zu einer idealen Senke und Datenquelle für die DoFn-Funktion.

BigQuery

BigQuery ist ein schnelles, kostengünstiges und vollständig verwaltetes Data Warehouse, mit dem Unternehmen umfangreiche Datenanalysen realisieren können. Grid-Ergebnisse werden häufig für Analysen verwendet und ermöglichen die Ausführung umfangreicher Zusammenfassungen auf Basis der Grid-Datenausgabe.

Pub/Sub

Pub/Sub ist ein asynchroner, skalierbarer Messaging-Dienst, der Dienste, die Nachrichten erzeugen, von Diensten entkoppelt, die diese Nachrichten verarbeiten. Sie können Pub/Sub für Streaminganalysen und Pipelines zur Datenintegration verwenden, um Daten aufzunehmen und zu verteilen. Es ist als nachrichtenorientierte Middleware für die Dienstintegration oder als Warteschlange zur Parallelisierung von Aufgaben gleichermaßen effektiv.

Dataflow-DAG

Mit dem Apache Beam SDK können Sie komplexe DAGs entwerfen, um damit problemlos mehrstufige Stream- oder Batch-Pipelines zu erstellen. Für die Datenbewegung ist der Runner zuständig, wobei die Daten als PCollection-Objekte ausgedrückt werden, bei denen es sich um unveränderbare parallele Elementauflistungen handelt.

Das folgende Diagramm veranschaulicht diesen Ablauf.

Datenfluss mit DAG

Mit dem Apache Beam SDK können Sie einen DAG definieren. Im DAG wiederum können Sie benutzerdefinierten Code als Funktionen hinzufügen. Normalerweise wird dieselbe Programmiersprache (Java, Python oder Go) sowohl für die Deklaration des DAG als auch für den benutzerdefinierten Code verwendet. Sie können auch Code verwenden, der nicht integriert ist, z. B. C++, für den benutzerdefinierten Code.

Nächste Schritte

  • Best Practices für die Arbeit mit hochgradig parallelen Dataflow-HPC-Pipelines

  • Folgen Sie der Anleitung, um eine Pipeline zu erstellen, die benutzerdefinierte Container mit C++-Bibliotheken verwendet.