Programmiermodell für Apache Beam

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.

Diagramm einer 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:

  1. 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.
  2. 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.
  3. Dataflow führt Optimierungen im Backend aus, damit Ihre Pipeline effizient ausgeführt und die Parallelisierung genutzt wird.
  4. 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 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.
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 und bzip2 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

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