Parallel Computing Framework Das leistet Apache Beam

Von Thomas Joos

Apache Beam ermöglicht als Parallel Computing Framework das Verarbeiten von nahezu unbegrenzten Datenmengen. Die Open Source Software bietet über verschiedene SDKs das Definieren von Batch-Pipelines oder Pipelines für Streaming-Data-Processing und unterstützt Hadoop, Spark und andere Engines.

Anbieter zum Thema

Apache Beam kann als Programmiermodell für die verteilte Datenverarbeitung bezeichnet werden. Das Modell ist dazu in der Lage, über APIs Datentypen und Data Frames zu verarbeiten.
Apache Beam kann als Programmiermodell für die verteilte Datenverarbeitung bezeichnet werden. Das Modell ist dazu in der Lage, über APIs Datentypen und Data Frames zu verarbeiten.
(Bild: gemeinfrei / Pixabay )

Apache Beam ist ein Open Source Tool, mit dem sich über verschiedene SDKs große Datenmengen über Pipelines verarbeiten lassen. Das Parallel Computing Framework stellt SDKs zur Verfügung, mit dem sich das von Google im Jahr 2015 vorgestellte Dataflow Model umsetzen lässt.

Dabei geht es im Grunde genommen darum Korrektheit, Latenz und Kosten in massiven und unbeschränkten Datenverarbeitungen zu koordinieren. Das Datenflussmodell kommt dann zum Einsatz, wenn vor allem riesige Datenmengen möglichst schnell, aber auch so genau wie möglich analysiert werden sollen.

Entwickeln mit Java und Python, verarbeiten mit Hadoop, Spark und anderen Systemen

Apache Beam kann als Programmiermodell für die verteilte Datenverarbeitung bezeichnet werden. Das Modell ist dazu in der Lage über APIs Datentypen und Data Frames zu verarbeiten. Hier lassen sich mit Apache Beam Batch Pipelines und Streaming-Pipelines erstellen. Die Pipelines sind in diesem Zusammenhang für das Lesen, Verarbeiten und Speichern der Daten zuständig.

Nachdem eine Pipeline erstellt ist, kann Apache Beam über einen Worker definieren, wo die Pipeline laufen soll. Beispiele dafür sind Hadoop oder Spark. Das ist einer der größten Vorteile von Apache Beam: Entwickler laufen bei der Verwendung nicht in Gefahr, einem Vendor-Lock-in zum Opfer zu fallen. Da Apache Beam verschiedene Programmiersprachen unterstützt und auch unterschiedliche Execution Engines, gibt es sehr flexible Verarbeitungsmöglichkeiten, die sich auch ständig wechseln lassen.

Dazu stellt Apache Beam verschiedene SDKs für Programmiersprachen zur Verfügung, mit denen sich anschließend Pipelines erstellen lassen. Häufig zum Einsatz kommen in diesem Bereich Java und Python. Die aktive Community erweitert aber ständig die Möglichkeiten von Beam und führt weitere SDKs für mehr Programmiersprachen in das System ein.

Im Fokus des Objektes steht die Entkoppelung der Verarbeitungslogik von Daten von der ausführenden Verarbeitungsengine. Dadurch können einmal erstellte Pipelines mit ihrer Ausführungslogik auf verschiedenen Execution Engines laufen.

Data Flow Model mit Apache Beam

Google hat das Datenflussmodell (Data Flow Model) im Jahr 2015 vorgestellt, und bietet diese Verarbeitung von Daten als Google Dataflow in der Google Cloud Platform (GCP) an. Apache Beam ermöglicht das Erstellen von Anwendungen, die nach dem gleichen Modell wie das Data Flow Model arbeitet, aber auch andere Executions Engines unterstützt, zum Beispiel Hadoop oder Spark.

Die Möglichkeiten von Apache Beam lassen sich in Google Colab testen.
Die Möglichkeiten von Apache Beam lassen sich in Google Colab testen.
(Bild: T. Joos)

Geht es um die Verarbeitung eines Datenflusses, lässt es sich nahezu nie genau feststellen, wann alle Daten zur Verfügung stehen, die anschließend schnell und korrekt verarbeitet werden müssen. Beginnt ein System früh mit der Datenverarbeitung, ist die Geschwindigkeit hoch, die Datenverarbeitung aber nicht korrekt, weil noch nicht alle Daten zur Verfügung stehen, die analysiert werden sollen. Wartet ein System länger mit der Verarbeitung, steigt die Menge der Daten an, die Verarbeitung ergibt bessere Ergebnisse durch die breite Datenlage, aber dafür wird auch die Latenz schlechter. Hier gilt es, einen optimalen Kompromiss zu finden

Unabhängigkeit von Sprache und Execution Engine

Das Interessante am Data Flow Model, das Apache Beam mit seinen SDKs bietet, ist die Unabhängigkeit zur ausführenden Engine, welche die Daten verarbeiten soll. Apache Beam ermöglicht über seine SDKs die Erstellung von Pipelines in nahezu beliebigen Programmiersprachen. Dazu gehören zum Beispiel Java, Python, Go, Scala und andere Sprachen. Die Execution Engines lassen sich wiederum ebenfalls frei wählen. Aktuell kommen hier vor allem Google Dataflow, Apache Flink, Apache Spark oder Hadoop zum Einsatz.

Die Stärke von Apache Beam besteht dabei nicht nur darin, dass die mit Apache Beam erstellte Pipeline in einer der unterstützten Execution Engines ausgeführt wird, sondern das System versucht die Stärken von allen Engines parallel zu nutzen. Es ist daher kein Problem, bei einer Pipeline parallel auf Flink, Spark und Hadoop zu setzen. Die Pipelines und die erstellten Worker können nahezu sprachneutral verschiedenen Code ausführen Dazu können die Entwickler in ihrer bevorzugten Programmiersprache mit dem SDK von Beam arbeiten, zum Beispiel dem SDK von Java oder Python. Über die APIs in Apache Beam können die Daten anschließend von verschiedenen Execution Engines verarbeitet werden.

Parallel dazu gibt es für jedes SDK auch einen eigenen SDK-Worker. Dabei ist jeder der verschiedenen SDK-Worker in Apache Beam in der Lage den gleichen Code auszuführen. Das erhöht die Unabhängigkeit der Entwickler von der eingesetzten Sprache und von der Execution Engine deutlich.

Apache Beam ermöglicht auch Batch Procession als Streaming-System

Im Data-Flow-Modell lassen sich die Datenströme in verschiedene logische „Windows“ unterteilen, die in einem Zeitstrahl bestimmte Aktionen zusammenfassen, zum Beispiel die Klicks von Besuchern einer Webseite auf verschiedenen Unterseiten. Ein Stream wird dadurch zu einer Sammlung verschiedener „Windows“, also Abschnitte oder Teile eines gesamten Streams. Wie die Windows mit Apache Beam aufgeteilt werden, ist schlussendlich Sache des jeweiligen Entwicklers oder Datenwissenschaftlers. Das Data Flow Model erlaubt hier verschiedene, unterschiedliche Formen für Windows.

Dabei unterscheidet Apache Beam zwischen „Event Time“ und „Processing Time“. Bei „Processing Time“ handelt es sich um die Zeit, in der ein Anwender eine Aktion durchführt, zum Beispiel einen Klick. Die „Processing Time“ ist wiederum die Zeit, wann die Aktion im Datenverarbeitungssystem eingeht und die Verarbeitung beginnt. In einem idealen Szenario sind „Event Time“ und „Processing Time“ identisch. Wenn aber „Processing Time“ erst nach der „Event Time“ angesiedelt ist, bedeutet das eine gewisse Latenz in der Datenverarbeitung, da das System die Aktion erst nach der eigentlichen Ausführung mitbekommt und verarbeiten kann.

Parallel dazu kommen im Data Flow Model auch Trigger zum Einsatz. Diese stehen in einer engen Verbindung mit den „Windows“. Trigger ermöglichen es Entwicklern festzulegen, wann die Ausgabeergebnisse für ein bestimmtes Windows ausgegeben werden sollen. Trigger und Windows sind daher ein Team, das im Rahmen der Entwicklung von Data Flow Models mit Apache Beam berücksichtigt werden.

Apache Beam installieren und testen

Wer einen ersten Blick auf Apache Beam werfen will, kann auf der Webseite des Projektes mit „Run in Colab“ eine Testumgebung erstellen, zum Beispiel in Python, Java oder Go. Auf der Seite „Data Pipelines with Apache Beam“ ist ein englischsprachiges und sehr ausführliches Beispiel zu finden, wie sich Pipelines in verschiedenen Sprachen mit Apache Beam aufbauen lassen.

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Softwareentwicklung und DevOps

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung

(ID:48202161)