Hadoop: eine Insel im Ozean der Open Source BigData-Technologien
In immer mehr Unternehmen halten BigData-Lösungen Einzug. Im Zuge dessen ist Hadoop in aller Munde und es existieren verschiedenste Vorstellungen davon, was Hadoop leisten kann oder wie sich andere BigData-Technologien wie zum Beispiel MapReduce, HBase oder Drill in Bezug zu Hadoop einordnen.
Dieser Artikel gibt einen Überblick darüber, was eigentlich Hadoop ist und warum Hadoop heutzutage kaum mehr allein eingesetzt wird, um eine BigData-Lösung umzusetzen. Der Grund dafür ist ein vielfältiges Open-Source-Ökosystem, in dem sich rund um Hadoop zahlreiche Technologien entwickelt haben, von denen in diesem Artikel ebenfalls ausgewählte Beispiele beleuchtet werden. Eines sei vorweg gesagt: Der Ozean der BigData-Technologien ist groß und den Standard-Technologiestack für BigData gibt es gegenwärtig nicht, auch wenn einige Projekte durch ihre Reife und Unterstützung großer Firmen herausstechen.
Apache Hadoop
Das Apache Hadoop Projekt [1] selbst entwickelt drei Kerntechnologien, die in Cluster-Applikationen Verwendung finden: Das Hadoop Distributed File System (HDFS) ist ein verteiltes Dateisystem, das es erlaubt, Dateien ausfallsicher über mehrere Server hinweg abzulegen. Mit MapReduce bietet Hadoop ein Framework, mithilfe dessen verteilte Batch-Prozesse auf einer abstrakten Ebene beschrieben werden können. YARN komplettiert die zur Verfügung gestellten Technologien mit einer Komponente zur Verwaltung von Cluster-Ressourcen und zum Scheduling von verteilten Anwendungen.
Obwohl diese Technologien breite Anwendung für die Implementierung von Cluster-Prozessen gefunden haben, sind sie oft nicht ausreichend, um alle wichtigen Design-Ziele zu erreichen. Als Ergebnis dessen haben viele Unternehmen ergänzende Frameworks entwickelt, welche die von Hadoop geschaffenen Möglichkeiten für Cluster-Anwendungen erweitern. Etliche dieser Entwicklungen sind mittlerweile ebenfalls als Projekte bei der Apache Software Foundation zuhause, wie beispielsweise Apache Accumulo. Andere Projekte wie die Workflow-Engine Azkaban wurden von den entwickelnden Unternehmen anderweitig als Open-Source-Software der Öffentlichkeit zugänglich gemacht.
Verteilte NoSQL-Datenbanken
Dort wo das HDFS an seine Grenzen stößt, setzen verteilte NoSQL-Datenbanken an. Sie ergänzen verteilte Dateisysteme um Möglichkeiten für wahlfreien Zugriff auf Einträge, das Ändern und Historisieren von Werten, Caches, automatisches Teilen und Zusammenführen von Datendateien und mächtigere APIs für das Auffinden und Ablegen von Daten.
Prominente Vertreter dieser Kategorie finden sich zahlreich als Apache-Projekte. Apache HBase [2] ist eine der ausgereiftesten verteilten Datenbanken und setzt auf dem HDFS als verteiltes Dateisystem auf. Seine Reife kommt dem System neben einer Fülle an unterstützten Features und einer sehr aktiven Community insbesondere in Form von hervorragender Wartbarkeit und Integration in Hadoop-Distributionen zugute. HBase stellt im Falle von Netzwerkproblemen Konsistenz über Verfügbarkeit und ist insbesondere für hohe Schreib- und Batch-Leselasten optimiert.
Eine weitere verteilte Datenbank, die den Fokus auf Konsistenz vor Verfügbarkeit legt, ist Apache Accumulo [3]. Diese ebenfalls für hohe Schreiblasten optimierte Datenbank glänzt vor allem durch ihre Schemafreiheit, Zugriffsbeschränkungen auf Zellebene und leichtgewichtiger Testbarkeit von Client-Code durch zur Verfügung gestellte Mock-Implementierungen.
Spielt Verfügbarkeit im Fall von Netzwerkpartitionen eine größere Rolle als Konsistenz oder ist die Performance bei wahlfreien Lesezugriffen entscheidend, bietet sich Apache Cassandra [4] als Lösung an. Diese verteilte Datenbank setzt auf einem anderen Dateisystem auf, das allerdings auch parallel zum HDFS auf demselben Cluster betrieben werden kann.
Query Engines
Während auf klassischen relationalen Datenbanksystemen mit SQL eine mächtige Anfragesprache für automatisierte Auswertungen oder manuelle Datenanalyse zur Verfügung steht, lassen verteilte Datenbanken oft nur sehr eingeschränkte Anfragen zu. Insbesondere für Anwendungsfälle wie Business Intelligence oder interaktive Datenexploration ist das allerdings nicht ausreichend. Deshalb existieren mittlerweile eine Reihe sogenannter SQL-on-Hadoop-Lösungen.
Eines der ersten und bekanntesten SQL-on-Hadoop-Projekte ist Apache Hive. Hive ermöglicht Zugriff auf verteilte Daten über die SQL-ähnliche Sprache HiveQL. Dazu müssen die Daten allerdings vorher in Hive-Tabellen überführt werden. Die HiveQL-Anfragen werden anschließend in MapReduce-Jobs übersetzt. Dadurch sind Hive-Anfragen schwerfällig und in vielen Fällen für die Zielanwendungsfälle zu langsam. Diesem Problem begegnete Hortonworks 2013 mit der Stinger-Initiative, die das Ziel hatte, Hive-Queries zu beschleunigen und HiveQL um weitere essentielle SQL-Konstrukte zu erweitern. 2014 kündigte Hortonworks die Folgeinitiative Stinger.next an, um Hive-Anfragen durch die Nutzung von Apache Spark in den meisten Fällen unter einer Sekunde beantworten zu können [5].
Eine weitere SQL-on-Hadoop-Lösung ist das von Facebook als Open-Source veröffentlichte Projekt Presto [6]. Es zeichnet sich insbesondere durch die vorhandene Anbindung an die ebenfalls von Facebook als Open-Source veröffentlichte verteilte Datenbank Apache Cassandra als Datenquelle aus. Die Design-Zielstellung von Presto ist es, durch eine darauf ausgerichtete Architektur interaktive Anfragen zu ermöglichen, welche hauptsächlich daraus resultierte, dass Apache Hive dies in seinen ersten Versionen aufgrund langsamer Anfragen nicht leisten konnte. Durch die Stinger-Initiative hat Hive aber in diesem Bereich aufgeholt.
Einer der neuesten Vertreter im SQL-on-Hadoop-Kosmos ist das Apache-Inkubator Projekt Drill [7]. Die Alleinstellung dieses Projektes ist das Ermöglichen von Day-Zero-Analysen. Das bedeutet, dass das Schema der Daten beim Zugriff auf diese inferiert wird und die Daten vorher weder mit einem Schema belegt noch in ein spezielles Format importiert werden müssen. Das gilt zumindest solange, wie sie in einem von Drill unterstützten Format vorliegen. Drill erlaubt dabei auch Zugriff auf verschachtelte Elemente, wenn beispielsweise JSON-Dateien untersucht werden. Neben diversen Dateiformaten wie TSV, JSON oder Parquet unterstützt Drill auch Apache HBase out-of-the-box als Datenquelle. Das Anbinden weiterer Datenquellen sieht Drill über einen plugin-artigen Mechanismus bereits vor. Drill ist ein äußerst vielversprechendes Projekt und steht seit kurzer Zeit zum Ausprobieren bereit.
Ein Blick in die Ferne des Hadoop-Ozeans
Die bisher beschriebenen Technologien werden oft in BigData-Projekten benötigt, aber der Technologie-Ozean um Hadoop bietet bei Weitem noch mehr Inseln, deren Einsatz je nach Anwendungsfall Sinn ergibt. So bieten Workflow Engines wie Apache Oozie [8] die Möglichkeit, komplexe BigData-Prozesse zu definieren und zu orchestrieren. Ist Echtzeitverarbeitung erforderlich, helfen Stream- oder Microbatching-Frameworks wie Apache Storm [9]. Auch für datenintensive Machine-Learning-Prozesse stehen Cluster-Lösungen zur Verfügung, beispielsweise das Apache Top-Level-Projekt Mahout [10]. In den klassischen BigData-Szenarien der Suchmaschinen und sozialen Netzwerke spielen außerdem Graphalgorithmen eine Schlüsselrolle. Auch für diese Problemstellung gibt es inzwischen mehrere Open-Source-Projekte, zum Beispiel Apache Giraph [11], dessen Leistungsfähigkeit Facebook bereits in einem Beitrag auf dem hauseigenen Engineering-Blog demonstriert hat [12].
Abgesehen von diesen spezialisierten Technologien verfolgt Apache Spark [13] den Ansatz eines ganzheitlichen Frameworks. Neben seiner beeindruckenden Performance, die auf einem von der UC Berkeley entwickelten Ansatz für eine In-Memory-Clusterdatenstruktur beruht, bietet Spark Komponenten für Microbatching, SQL-on-Hadoop, Graphalgorithmen und Machine-Learning. Es wird zurzeit von starkem Interesse von Firmen und Entwicklern beobachtet und unterstützt und könnte ein neuer Kontinent im Hadoop-Ozean sein.
Quellen
[1] hadoop.apache.org
[2] hbase.apache.org
[3] accumulo.apache.org
[4] cassandra.apache.org
[5] hortonworks.com
[6] prestodb.io
[7] incubator.apache.org
[8] oozie.apache.org
[9] storm.apache.org
[10] mahout.apache.org
[11] giraph.apache.org
[12] facebook.com
[13] spark.apache.org