Hochgradige parallele Dataflow-Arbeitslasten

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.

  • Vollständig verwalteten Workflow mit Datenverarbeitung und Orchestrierung in derselben Pipeline erstellen.
  • Verwenden Sie ein einziges System für alle Aspekte der Pipeline, sowohl für die Vor- als auch für die Nachbearbeitung und für die Aufgabenverarbeitung. Sie können sogar den vorhandenen C++-Code in der Pipeline verwenden.
  • Verwenden Sie die integrierte genau einmalige Verarbeitung von Dataflow.

Darüber hinaus enthält 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 die 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. Mit C++-Binärdateien können Sie diese 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. Nehmen Sie Rohdaten aus internen und externen Quellen auf. Die Daten können aus unbegrenzten oder begrenzten Quellen stammen. Unbegrenzte Quellen werden hauptsächlich in begrenzte Quellen umgewandelt, um die Technologien zu berücksichtigen, die für die Aufgabenfarm verwendet werden.

  2. Vorverarbeiten der Rohdaten in eine Datenform und Codierung, die die Komponente der Aufgabenfarm verwenden kann.

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

  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-Features 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 somit 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 Aufgabenfarmsystem zu einem hochparallelen Workflow migrieren, müssen Sie von Aufgaben zu Daten wechseln. Ein PTransform enthält einen DoFn mit einer Prozessfunktion, die ein Datenelement übernimmt. Der Datenpunkt kann ein beliebiges Objekt mit einem oder mehreren Attributen sein.

Mit einem DAG und einer einzelnen Pipeline können Sie während des gesamten Workflows alle Daten im System 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 von Google Cloud verwaltete Dienste eingebunden, die in großem Maßstab parallelisierte Daten-E/A-Vorgänge aufnehmen können:

  • Pub/Sub: spaltenorientierter Speicher für Caching und Bereitstellung
  • Bigtable: Dienst zur Aufnahme globaler Ereignisstreams
  • Cloud Storage: einheitlicher Objektspeicher
  • BigQuery: Data-Warehouse-Dienst im Petabyte-Bereich

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

Die allgemeine Architektur für hochparallele Arbeitslasten, die in Google Cloud ausgeführt werden, umfasst Folgendes:

  • Den Dataflow-Runner für Apache Beam. Der Runner verteilt die Aufgaben an die einzelnen Grid-Knoten in Form eines Verarbeitungsablaufs, der von einem DAG abgeleitet wird. 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.

Im folgenden Diagramm ist die allgemeine Architektur für einen Beispielworkflow beschrieben.

Architektur einer Grid-Computing-Lösung

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

Dataflow-Runner für Apache Beam

Mit Dataflow können Sie Daten sowohl im Streaming- als auch im Batchmodus 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 ist eine Ergänzung zu 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 und skalierbarer Messaging-Dienst, der Dienste entkoppelt, die Nachrichten von Diensten erzeugen, 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 Datenverschiebung ist der Runner zuständig, wobei die Daten als PCollection-Objekte ausgedrückt werden. Diese sind unveränderbare Sammlungen von parallelen Elementen.

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 für den benutzerdefinierten Code auch nicht integrierten Code wie C++ verwenden.

Nächste Schritte

  • Best Practices für die Arbeit mit parallelen Pipelines von Dataflow HPC.

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