Dataflow basiert auf dem Open-Source-Projekt Apache Beam. In diesem Dokument wird das Apache Beam-Programmiermodell beschrieben.
Überblick
Apache Beam ist ein einheitliches Open-Source-Modell, mit dem sowohl Batch- als auch Streamingpipelines definiert werden können. Das Apache Beam-Programmiermodell vereinfacht die Funktionsweise umfangreicher Datenverarbeitungsvorgänge. Zu diesem Zweck erstellen Sie mithilfe eines Apache Beam SDK ein Programm, das die Pipeline definiert. Anschließend führen Sie die Pipeline auf einer bestimmten Plattform wie Dataflow aus. Bei diesem Modell steht der logische Aufbau Ihres Datenverarbeitungsjobs im Mittelpunkt und nicht die Verwaltung der Orchestrierung der Parallelverarbeitung.
Apache Beam isoliert Sie von den Low-Level-Details der verteilten Verarbeitung, z. B. der Koordinierung einzelner Worker, Fragmentierung von Datasets und anderen ähnlichen Aufgaben. Dataflow übernimmt die vollständige Verwaltung dieser Low-Level-Details.
Eine Pipeline ist ein Graph mit Transformationen, die auf Datensammlungen angewendet werden. In Apache Beam wird eine Sammlung als PCollection
und eine Transformation als PTransform
bezeichnet. Eine PCollection
kann begrenzt oder unbegrenzt sein.
Eine begrenzte PCollection
hat eine bekannte, feste Größe und kann mit einer Batchpipeline verarbeitet werden. Unbegrenzte PCollections
müssen eine Streaming-Pipeline verwenden, da die Daten verarbeitet werden, wenn sie eintreffen.
Apache Beam bietet Connectors zum Lesen und Schreiben in verschiedenen Systemen, einschließlich Google Cloud-Diensten und Technologien von Drittanbietern wie Apache Kafka.
Das folgende Diagramm zeigt eine Apache Beam-Pipeline.
Sie können PTransforms
schreiben, das eine beliebige Logik ausführt. Die Apache Beam SDKs bieten außerdem eine sofort einsatzbereite Bibliothek mit nützlichen PTransforms
, einschließlich:
- Filtern Sie alle Elemente heraus, die kein Prädikat erfüllen.
- Wenden Sie auf jedes Element eine 1:1-Zuordnungsfunktion an.
- Gruppieren Sie Elemente nach Schlüssel.
- Zählen Sie die Elemente in einer Sammlung.
- Zählen Sie die mit jedem Schlüssel verknüpften Elemente in einer Schlüssel/Wert-Paarsammlung.
Führen Sie die folgenden Schritte aus, um eine Apache Beam-Pipeline mit Dataflow auszuführen:
- Verwenden Sie das Apache Beam SDK, um die Pipeline zu definieren und zu erstellen. Alternativ können Sie eine vordefinierte Pipeline mithilfe einer Dataflow-Vorlage bereitstellen.
- Führen Sie mit Dataflow die Pipeline aus. Dataflow weist einen Pool von VMs zu, um den Job auszuführen, den Code auf den VMs bereitzustellen und den Job zu orchestrieren.
- Dataflow führt Optimierungen im Backend aus, damit Ihre Pipeline effizient ausgeführt und die Parallelisierung genutzt wird.
- Verwenden Sie während der Ausführung und nach Beendigung eines Jobs die Dataflow-Verwaltungsfunktionen, um den Fortschritt zu überwachen und Fehler zu beheben.
Apache Beam-Konzepte
Dieser Abschnitt enthält grundlegende Konzepte in zusammengefasster Form.
Grundlegende Konzepte
- Pipelines
- Eine Pipeline kapselt die gesamte Abfolge von Berechnungen, die zum Lesen von Eingabedaten, Transformieren dieser Daten und Schreiben von Ausgabedaten erforderlich sind. Die Eingabequelle und die Ausgabesenke können denselben Typ oder einen unterschiedlichen Typ haben, sodass Sie Daten von einem Format in ein anderes konvertieren können. Apache Beam-Programme erstellen zuerst ein
Pipeline
-Objekt und verwenden dieses Objekt dann als Grundlage zum Erstellen der Datasets für die Pipeline. Jede Pipeline steht für einen einzelnen, wiederholbaren Job. - PCollection
- Ein
PCollection
-Objekt stellt ein potenziell verteiltes Dataset mit mehreren Elementen dar, das die Datengrundlage der Pipeline bildet. Apache Beam-Transformationen verwendenPCollection
-Objekte als Ein- und Ausgaben für die einzelnen Schritte in der Pipeline. EinPCollection
-Objekt kann ein Dataset fester Größe oder ein unbegrenztes Dataset aus einer Datenquelle enthalten, die kontinuierlich aktualisiert wird. - Transformationen
- Eine Transformation ist ein Verarbeitungsvorgang, der Daten umwandelt. Dabei werden ein oder mehrere
PCollection
-Objekte als Eingabe angenommen, von Ihnen festgelegte Vorgänge für jedes Element in dieser Sammlung ausgeführt und ein oder mehrerePCollection
-Objekte ausgegeben. Eine Transformation kann nahezu jede Art von Verarbeitungsvorgang durchführen. Dazu gehören mathematische Berechnungen an Daten, die Umwandlung von Daten von einem Format zu einem anderen, das Gruppieren, Lesen und Schreiben von Daten, das Filtern von Daten, sodass nur die gewünschten Elemente ausgegeben werden, und das Kombinieren von Datenelementen zu Einzelwerten. - ParDo
ParDo
ist der zentrale Parallelverarbeitungsvorgang in den Apache Beam SDKs, der eine benutzerdefinierte Funktion für jedes Element der Eingabe-PCollection
aufruft.ParDo
fasst null oder mehr Ausgabeelemente in einer Ausgabe-PCollection
zusammen. Die TransformationParDo
verarbeitet Elemente unabhängig und unter Umständen parallel.- Pipeline-E/A
- Mit Apache Beam-E/A-Connectors können Sie Daten in die Pipeline einlesen und Ausgabedaten aus der Pipeline schreiben. Ein E/A-Connector besteht aus einer Quelle und einer Senke. Alle Apache Beam-Quellen und -Senken sind Transformationen, die der Pipeline das Arbeiten mit Daten aus verschiedenen Datenspeicherformaten ermöglichen. Sie können auch einen benutzerdefinierten E/A-Connector schreiben.
- Aggregation
- Bei einer Aggregation wird ein Wert aus mehreren Eingabeelementen berechnet. In Apache Beam besteht das primäre Berechnungsmuster für Aggregationen darin, alle Elemente mit einem gemeinsamen Schlüssel und Fenster zu gruppieren. Anschließend werden die einzelnen Elementgruppen mithilfe eines assoziativen und kommutativen Vorgangs kombiniert.
- Nutzerdefinierte Funktionen (UDFs)
- Einige Vorgänge in Apache Beam ermöglichen, dass benutzerdefinierter Code zum Konfigurieren der Transformation ausgeführt wird. Benutzerdefinierter Code gibt für
ParDo
den Vorgang an, der auf jedes Element anzuwenden ist, und fürCombine
, wie Werte kombiniert werden sollen. Eine Pipeline kann UDFs enthalten, die in einer anderen Sprache als der Sprache Ihres Runners geschrieben sind. Eine Pipeline kann UDFs enthalten, die in mehreren Sprachen geschrieben sind. - Läufer
- Ein Runner ist die Software, die eine Pipeline annimmt und ausführt. Die meisten Runner sind Übersetzer oder Adapter für massiv parallele Big-Data-Verarbeitungssysteme. Für lokale Test- und Fehlerbehebungsvorgänge gibt es andere Runner.
- Quelle
- Eine Transformation, die aus einem externen Speichersystem liest. Pipelines lesen normalerweise Eingabedaten aus einer Quelle. Die Quelle hat einen Typ, der sich vom Senkentyp unterscheiden kann. Sie können also das Format der Daten ändern, während diese durch die Pipeline geleitet werden.
- Sink
- Eine Transformation, die in ein externes Datenspeichersystem schreibt, z. B. eine Datei oder eine Datenbank.
- TextIO
- Ein PTransform zum Lesen und Schreiben von Textdateien. Die TextIO-Quelle und -Senke unterstützen Dateien, die mit
gzip
undbzip2
komprimiert wurden. Die TextIO-Eingabequelle unterstützt JSON. Damit der Dataflow-Dienst Eingabe und Ausgabe jedoch parallelisieren kann, müssen Ihre Quelldaten durch einen Zeilenumbruch getrennt werden. Sie können einen regulären Ausdruck verwenden, um die TextIO-Quelle auf bestimmte Dateien auszurichten. Dataflow unterstützt allgemeine Platzhaltermuster. Ihr glob-Ausdruck kann an beliebiger Stelle im Pfad angegeben werden. Allerdings unterstützt Dataflow keine rekursiven Platzhalter (**
).
Erweiterte Konzepte
- Ereignisdauer
- Die Zeit, zu der ein Datenereignis eintritt. Diese wird durch den Zeitstempel auf dem Datenelement bestimmt. Demgegenüber steht die Zeit, zu der das Datenelement in einer beliebigen Phase in der Pipeline tatsächlich verarbeitet wird.
- Windowing
- Windowing ermöglicht das Gruppieren von Vorgängen über unbegrenzte Sammlungen hinweg. Dabei wird die Sammlung gemäß den Zeitstempeln der einzelnen Elemente in Fenster von endlichen Sammlungen unterteilt. Die Windowing-Funktion teilt dem Runner mit, wie Elemente einem Anfangsfenster zuzuweisen und Fenster gruppierter Elemente zusammenzuführen sind. Mit Apache Beam können Sie verschiedene Arten von Fenstern definieren oder die vordefinierten Windowing-Funktionen verwenden.
- Wasserzeichen
- Apache Beam verfolgt ein Wasserzeichen. Wasserzeichen geben an, wann alle Daten in einem bestimmten Fenster nach Ansicht des Systems voraussichtlich in der Pipeline eingetroffen sind. Wasserzeichen werden von Apache Beam verfolgt, weil das Eintreffen von Daten in einer Pipeline weder in zeitlicher Reihenfolge noch in vorhersehbaren Abständen garantiert wird. Außerdem ist nicht sicher, dass Datenereignisse in derselben Reihenfolge, in der sie generiert wurden, auch in der Pipeline auftauchen.
- Trigger
- Trigger bestimmen, wann aggregierte Ergebnisse nach dem Eintreffen von Daten ausgegeben werden. Bei begrenzten Daten erfolgt die Ausgabe, nachdem alle Eingaben verarbeitet wurden. Bei unbegrenzten Daten werden Ergebnisse ausgegeben, wenn das Wasserzeichen das Ende des Fensters passiert. Dies zeigt an, dass das System davon ausgeht, dass alle Eingabedaten für dieses Fenster verarbeitet wurden. Apache Beam bietet mehrere vordefinierte Trigger, die Sie kombinieren können.
Nächste Schritte
- Weitere Informationen zum Erstellen von Pipelines mit den Apache Beam SDKs finden Sie im Apache Beam-Programmierhandbuch in der Apache Beam-Dokumentation.
- Weitere Informationen zu den von Dataflow unterstützten Apache Beam-Funktionen finden Sie in der Apache Beam-Funktionsmatrix.