Suchen

Apache Flume Daten sammeln, aggregieren und in HDFS bereitstellen

| Autor / Redakteur: Thomas Joos / Nico Litzel

Apache Flume erlaubt das umfassende Sammeln von Daten, vor allem im Bereich Streaming-Event-Daten. Die Daten lassen sich in Hadoop Cluster übertragen und auf diesem Weg effizient weiterverarbeiten. Viele Anbieter von Big-Data-Lösungen, darunter Cloudera, unterstützen bereits Flume.

Firma zum Thema

Der Ablauf bei der Verarbeitung von Daten mit Apache Flume.
Der Ablauf bei der Verarbeitung von Daten mit Apache Flume.
(Bild: The Apache Software Foundation)

Neben Cloudera arbeiten auch Hortonworks, Motorola und Apple an Apache Flume mit. Es ist also schnell ersichtlich, dass das Apache-Top-Level-Projekt durchaus ernst genommen werden muss. Beispiele und Vorlagen für Flume-Projekte lassen sich direkt bei Cloudera herunterladen. ProSiebenSat1 setzt ebenfalls auf Apache Flume. Hier wird die Lösung dazu genutzt, Daten aus verschiedenen Quellen, Videodaten und Daten aus sozialen Netzwerken zusammenzutragen.

Im Fokus von Apache Flume stehen vor allem Daten und Datenströme aus dem Internet der Dinge. Hier kommen eine Vielzahl an Informationen von verschiedenen Geräten und Bereichen im Unternehmen an. Bevor diese durch Lösungen wie Hadoop analysiert werden können, müssen die Daten umfassend aggregiert und effizient in den Cluster übertragen werden.

Flume wird vor allem dann eingesetzt, wenn unterschiedliche Datenspeicher eingebunden werden müssen. Dabei kann es sich um herkömmliche Datenbanken, aber auch um Indizes von Suchmaschinen handeln.

Generell ist Flume vor allem für die Verarbeitung von Netzwerkdaten und Informationen aus sozialen Medien geeignet. Auch E-Mails kann das System von verschiedenen Datenquellen importieren, verarbeiten und an Hadoop oder HDFS weitersenden. Seit Version 1.5 lassen sich die Daten auch per Dataset Sink auf Basis von Kite API in HDFS/HBase übertragen. Apache Flume benötigt Java Runtime ab Version 1.6. Neue Versionen sind in den meisten Fällen nahezu vollständig abwärtskompatibel zu den Vorgängern.

Diese Komponenten müssen Entwickler kennen

Nutzen Unternehmen mehrere Flume-Knoten, werden diese zentral verwaltet. Die Konfiguration erfolgt ebenfalls über eine zentrale Konfigurationsdatei, die sich schnell und einfach bereitstellen lässt. Administratoren haben hier die Möglichkeit mit cf-engine, Chef und Puppet zu arbeiten. Wird Flume zusammen mit Cloudera eingesetzt, lassen sich im Cloudera Manager zentral alle Einstellungen für Hadoop vornehmen, auch für Flume.

Die eingehenden und ausgehenden Daten werden in Flume „Runners“ genannt. Verarbeitet werden diese Arbeitsprozesse parallel. Ältere Versionen von Flume haben für ein- und ausgehende Übertragungen noch gemeinsame Arbeitsprozesse verwendet. Diese Struktur war langsam und nicht sehr stabil, da hängende Daten schnell die ganze Übertragung ausbremsen können.

Alle eingehenden Daten werden als „Source“ bezeichnet. Daten, die Flume verarbeitet hat und in Hadoop/HDFS integrieren will, tragen die Bezeichnung „Sinks“. Die „Channels“ stellen die Verarbeitungs- und Verbindungsschicht zwischen „Sources“ und „Sinks“ dar. Die Komponenten „Source“, „Sink“ und „Channels“ laufen in Flume innerhalb eines gemeinsamen Deamon mit der Bezeichnung „Agent“. Der wichtigste Begriff von Daten, die über Flume transportiert werden ist „Event“. Ein Event besteht aus einem Header und einem Body mit Daten.

Sources schreiben Events in mehr als einen Channel. Allerdings erhalten Sinks die Events nur von einem einzelnen Channel. Ein Agent kann wiederum aus mehreren Channels bestehen. Die Technik lässt sich auch miteinander verketten. Das heißt, es lassen sich mehrere Agenten parallel zueinander und hintereinander schalten.

Flume-Events verstehen

Header bestehen aus Key/Value-Paaren, über die festgelegt werden kann, wie Flume die Daten verarbeiten soll. Außerdem lassen sich über diesen Weg auch andere strukturierte Informationen übertragen zum Beispiel Servername, Zeitstempel und andere Daten. Grundsätzlich haben Header in Flume-Events die gleichen Aufgaben wie HTTP-Header, sie transportieren wichtige Informationen zur weiteren Verarbeitung und bestimmen dadurch das Routing der Informationen.

Der Body eines Events besteht aus den eigentlichen Daten und enthält verschiedene Texte. Flume ändert den Body nicht ab. Die Daten in diesem Teil des Events werden von der Source übertragen. Flume kann aber den Header bearbeiten, damit die Informationen besser geroutet werden können.

Flume-Events können allerdings von Entwicklern bearbeitet und angepasst werden. Dieser Prozess trägt dann die Bezeichnung „Interceptor“. Grundsätzlich können zwischen Source und Sink im Channel mehrere Interceptors integriert werden. Beispiele dafür sind Java Servlets.

Für die Übertragung zu einem anderen Channel sind „Selectors“ zuständig. Diese gehören zum Standardumfang von Flume. Entwickler können jedoch auch eigene Selectors schreiben. Eine typische Aufgabe eines Selectors ist das Kopieren eines Events in einen anderen Channel. Hier lassen sich aber auch Abfragen des Headers durchführen und so festlegen, welcher Channel eine Kopie erhalten soll.

Der „Sinc Processor“ ist schlussendlich für die Hochverfügbarkeit und den Lastenausgleich verantwortlich. Entwickler können mehrere Failover-Konfigurationen für Events zwischen verschiedenen Sinks in einem Channel erstellen.

In größeren Szenarien können Sinks, also die Übergabe der Events an HDFS, die Daten auch zu anderen Sources übertragen und auf diesem Weg als Source für ein weiteres Event genutzt werden. Die Daten lassen sich also auch miteinander verketten, um auch große Szenarien abbilden zu können. In diesem Beispiel würde der Sink das Ergebnis als nicht an HDFS übergeben, sondern an die Source des nächsten Agenten.

Apache Flume und Microsoft Azure HDInsight

Standardmäßig lässt sich Apache Flume nicht mit HDInsight verbinden. Das liegt daran, dass Flume zur Speicherung vor allem das HDFS-Dateisystem nutzt. Dieses wird allerdings von HDInsight nicht eingesetzt, HDInsight arbeitet in diesem Bereich mit Azure Blob Container. Außerdem hat Microsoft sehr hohe Ansprüche an die Leistungsfähigkeit der Hadoop Cluster. Diese kann durch unsachgemäße Einbindung von Flume aber leiden. Denn der Hadoop Cluster in Microsoft Azure ist nicht direkt über das Dateisystem ansprechbar. Das ist aber eine Voraussetzung für Flume.

Entwickler haben aber die Möglichkeit, auf Basis virtueller Linux-Server in Microsoft Azure einen eigenen Cluster zu erstellen. Dieser kann wiederum problemlos mit Apache Flume zusammenarbeiten. Microsoft stellt über einen Blog-Beitrag allerdings Informationen zur Verfügung, mit denen sich Apache Flume in Azure und auch HDInsight über Umwege einbinden lässt.

Amazon Web Services und Apache Flume

AWS ist gegenüber Flume aber wesentlich offener. Entwickler können Daten in Amazon S3 speichern und mit Apache Flume weiterverarbeiten. Im Gegensatz zu Azure HDInsight sind keine größeren Anpassungen notwendig.

Fazit

Apache Flume gehört zu den Big-Data-Projekten, die sich Unternehmen ansehen sollten, wenn aus verschiedenen Datenquellen große Informationsströme in kurzer Zeit verarbeitet und übertragen werden können. Vor allem in Zusammenarbeit mit Hadoop und zahlreichen Quellen kann sich so die Verarbeitungsleistung deutlich verbessern.

(ID:43614784)

Über den Autor

 Thomas Joos

Thomas Joos

Freiberuflicher Autor und Journalist