Programmiermodell für Apache Beam

Apache Beam ist ein einheitliches Open-Source-Modell, mit dem sowohl Batch- als auch Streamingpipelines zur parallelen Datenverarbeitung ausgeführt 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ührt ein von Apache Beam unterstütztes Back-End für verteilte Verarbeitung wie Dataflow die Pipeline aus. Bei diesem Modell steht der logische Aufbau Ihres Datenverarbeitungsjobs im Mittelpunkt und nicht die physische Orchestrierung der Parallelverarbeitung. Damit können Sie sich ganz darauf konzentrieren, was Ihr Job ausführen muss, und nicht darauf, wie dieser Job genau ausgeführt wird.

Dank der nützlichen Abstraktionen, die das Apache Beam-Modell bereitstellt, müssen Sie sich nicht um Low-Level-Details der verteilten Verarbeitung wie das Koordinieren einzelner Worker, Fragmentieren von Datasets und andere ähnliche Aufgaben kümmern. Dataflow übernimmt die vollständige Verwaltung dieser Low-Level-Details.

Konzepte

Dieser Abschnitt enthält grundlegende Konzepte in zusammengefasster Form. Auf der Apache Beam-Website werden Sie in der Apache Beam-Programmieranleitung Schritt für Schritt durch die grundlegenden Konzepte zum Erstellen von Pipelines mit den Apache Beam SDKs geführt.

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 vom selben Typ oder unterschiedlich sein, 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 verwenden PCollection-Objekte als Ein- und Ausgaben für die einzelnen Schritte in der Pipeline. Ein PCollection-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 mehrere PCollection-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 Transformation ParDo 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ür Combine, 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.

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 gibt es keine Garantie dafür, dass Datenereignisse in derselben Reihenfolge, in der sie generiert wurden, auch in der Pipeline auftreten.
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.

Weitere Informationen

Ausführliche Erklärungen finden Sie in der Apache Beam-Programmieranleitung auf der Apache Beam-Website.

Apache Beam™ ist eine Marke der Apache Software Foundation oder deren Tochtergesellschaften in den USA und/oder anderen Ländern.