Magnus Reimann

„Verbringe die Zeit nicht mit der Suche nach einem Hindernis, vielleicht ist keins da.“ (Franz Kafka, 1920)

Wenn es um die Speicherung großer Datenmengen in Hadoop geht, stellt sich zuallererst die Frage, wie die Daten von den Quellsystemen in Hadoop importiert werden können. In einer produktiven Umgebung ist es nicht praktikabel, manuell neue Dateien über die Kommandozeile in das Hadoop-Dateisystem (HDFS) zu übertragen. Als Lösung bietet sich seit geraumer Zeit das auf derartiger Aufgaben spezialisierte Apache Flume an, das darauf spezialisiert ist, Daten in Hadoop / HBase zu importieren. Dazu werden diese Daten aus den Quellen über Kanäle transportiert und mit Hilfe von sogenannten Sinks in das Ziel geschrieben. Es handelt sich also um eine sogenannte Push-Architektur.
Als neue und allgemeinere Lösung steht inzwischen ebenfalls Apache Kafka bereit. Hierbei handelt es sich um ein Nachrichtensystem, das Daten über sogenannte Broker veröffentlicht, die von mehreren Anwendungen (Consumer) abonniert werden können (Pull-Architektur).
Da es große Überschneidungen in beiden Lösungen gibt, stellt sich die Frage, für welche man sich entscheiden möchte. Hier empfiehlt es sich, Kafka in den Szenarien einzusetzen, in denen mehrere Anwendungen auf einen Datenstrom zugreifen und Flume den Vorzug zu geben, wenn Daten ohne großen Entwicklungsaufwand „nur“ in Hadoop importiert werden sollen. In jedem Fall ist auch ein paralleler Betrieb je nach Datenquelle möglich.
Kafka ist Bestandteil der Hortonworks Data Platform ab Version 2.2.

Quellen:

Apache Flume: https://flume.apache.org/
Apache Kafka: http://kafka.apache.org/
Hortonworks: http://www.hortonworks.com