Apache Hadoop

Framework zur Big-Data-Verarbeitung

Uhr | Updated
von Marc Büchel, Ocaholic

Apache Hadoop ist eine der treibenden Kräfte hinter dem starken Wachstum der Big-Data-Industrie. Hadoop wird oft im Zusammenhang mit Technologien wie "Hive" und "Pig" erwähnt, aber was macht dieses Ding genau und wozu braucht man all seine Kollegen mit komischen Namen wie "Oozie", "Zookeeper" und "Flume"?

Marc Büchel ist Gründer und Chefredaktor von Ocaholic, dem Schweizer Onlineportal für Overclocking- und Hardware-Enthusiasten.
Marc Büchel ist Gründer und Chefredaktor von Ocaholic, dem Schweizer Onlineportal für Overclocking- und Hardware-Enthusiasten.

Mit Hadoop erhält man die Möglichkeit, grosse Datenmengen günstig zu verarbeiten und ist dabei unabhängig von der Struktur der Daten. Unter "gross" verstehen wir 10 bis 100 Gigabyte oder sogar noch mehr. Was aber ändert sich in der Datenverarbeitung? Konventionelles Data-Warehousing sowie relationale Datenbanken brillieren, wenn es darum geht, strukturierte Daten zu verarbeiten oder gigantische Mengen zu speichern. Das Problem dieses Umfelds ist schnell erkannt: die Strukturiertheit der Daten. Hat man eine Menge heterogener Daten auf seinen Servern liegen, dann wird es schwierig, diese mit den traditionellen Mitteln zu verarbeiten. Exakt an der Stelle tritt Hadoop auf den Plan.

Map Reduce, das Herzstück von Hadoop

Um Problemen beim Erstellen von Suchindizes im Internet entgegenzuwirken, entwickelte Google das Map Reduce Framework. Dieses ist die treibende Kraft hinter den meisten Prozessen, die sich dieser Tage um die Verarbeitung von "Big Data" kümmern. Map Reduce findet man aber nicht nur in Hadoop, sondern auch in MPP- oder NoSQL-Datenbanken, wie beispielsweise Vertica oder MongoDB. Map Reduce zeichnet die Fähigkeit aus, ein spezifisches Datenset zuerst anzunehmen, dieses anschliessend zu teilen und dann parallel auf mehreren Knotenpunkten in einem Rechenzentrum zu verarbeiten. Dadurch, dass die Daten zerkleinert werden, lässt sich das Problem, dass Daten zu gross sind, um verarbeitet zu werden, elegant umschiffen. Kombiniert man diese Technik nun mit Linux-Servern, erhält man gegenüber massiven Rechnern eine kosteneffiziente Alternative. Bei Hadoop handelt es sich im Prinzip um eine Open-Source-Implementierung von Map Reduce.

HDFS und Map Reduce

Als Erstes haben wir die Fähigkeit von Map Reduce angesprochen, die Last innerhalb eines "Distributed-Computing"-Systems auf mehrere Rechner zu verteilen. Damit das überhaupt möglich ist, muss jeder Server Zugriff auf die Daten haben. An dieser Stelle kommt HDFS zum Einsatz, wobei HDFS für Hadoop Distributed File System steht. Angenehm an HDFS und Map Reduce ist, dass es sich um robuste Prozesse handelt, das heisst, dass sie fehlschlagen können, aber der eigentliche Berechnungsprozess dadurch nicht "abgeschossen" wird. HDFS stellt dabei sicher, dass Daten repliziert werden und dadurch die Redundanz innerhalb eines Clusters gewährleistet werden kann. Sobald eine Berechnung fertiggestellt ist, wird diese in HDFS zurückgeschrieben. Hinsichtlich der Art von Daten, die verarbeitet werden, gibt es bei HDFS keine Restriktionen. Dementsprechend können Daten unstrukturiert oder ohne spezifisches Schema sein. Stellt man dem relationale Datenbanken gegenüber, dann müssen die Daten vor deren Verarbeitung erst strukturiert werden. Zudem erstellt man vor der Speicherung in einer Datenbank ein passendes Schema.

Bessere Programmierbarkeit mit Pig und Hive

Damit man Daten für die Verarbeitung mit Hadoop laden kann, kommt die Java API zum Einsatz, das heisst, es handelt sich um einen Task, um den sich ein Programmierer zu kümmern hat. Glücklicherweise muss nicht jeder einzelne Vorgang von Hand codiert werden, denn mit Pig und Hive gibt es Tools, die gängige Aufgaben erleichtern können. Bei "Pig" handelt es sich um eine Programmiersprache, die es ermöglicht, einfacher mit alltäglichen Aufgaben umzugehen. Die bereits in Pig integrierten Operationen wissen, mit teilstrukturierten Daten, wie beispielsweise Log-Files, umzugehen. Hinzu kommt, dass Java unterstützt wird, und so kann man auch Anpassungen vornehmen, um letztlich unbekannte Datentypen zu verarbeiten. Mit Hive kann Hadoop als Data-Warehouse verwendet werden. Dabei wird eine Struktur über die Daten gelegt, aufgrund derer Queries zur weiteren Verarbeitung abgesetzt werden können. Man kann sich Hive als "SQL-ähnlich" vorstellen, wobei es wie Pig ebenfalls erweiterbar ist. Ob man sich nun für Hive oder Pig entscheiden soll, kann durchaus verwirrend sein. Hive eignet sich vornehmlich für Data-Warehousing-Tasks, wobei statische Strukturen vorliegen sollten. Im Gegensatz dazu kommt Pig vor allem dann in Frage, wenn man es mit grossen Datensätzen zu tun hat. So können beispielsweise Skripte geschrieben werden, die die vorliegenden Daten verändern. Pig ist sozusagen ein schlankeres Layer, das über Hadoop gelegt wird, als das bei Hive der Fall ist. Der Hauptvorteil besteht darin, dass die Menge an Code, die geschrieben werden muss, drastisch reduziert wird. Gäbe es Hive und Pig nicht, müsste die komplette Programmierarbeit mit Hadoops Java API erledigt werden, was äusserst zeitintensiv wäre.

Besserer Datenzugriff mit Hbase, Sqoop und Flume

Der Kern von Hadoop ist ein batchorientiertes System. Daten werden in HDFS geladen, im Anschluss daran verarbeitet und letztlich weitergegeben. Oftmals ist es in diesem Fall notwendig, dass zufällig auf Daten zugegriffen werden kann. Nimmt man sich Hbase an, dann stellt man fest, dass es sich dabei um eine spaltenorientierte Datenbank handelt, die über HDFS gelegt wird. Als Vorbild diente dabei Googles "BigTable"-Projekt, dessen Ziel es war, Milliarden von Zeilen in einer Datenbank schnell auf zufällige Einträge zu durchsuchen. Map Reduce kann Hbase als Quelle oder Ziel für Berechnungen verwenden, und Hive sowie Pig können mit Hbase kombiniert werden. Um zufällig auf Daten zugreifen zu können, gibt es bei Hbase einige Einschränkungen. Verwendet man Hive zusammen mit Hbase, dann sinkt die Performance um Faktor 4 bis 5 – verglichen mit dem nackten HDFS. Hinzu kommt, dass auch die maximale Menge an Daten, die gespeichert werden kann, auf ein Petabyte sinkt, wohingegen mit HDFS über 30 Petabyte gespeichert werden kann. Hbase eignet sich darüber hinaus nicht für Ad-hoc-Datenanalysen und wird besser verwendet, um als Teil einer grossen Anwendung zu operieren.

Input und Output von Daten

Um die Interoperabilität von Daten weiter zu verbessern, gibt es Sqoop und Flume. Bei Ersterem handelt es sich um ein Tool, das es einem erlaubt, Daten aus relationalen Datenbanken in Hadoop zu importieren. In diesem Zusammenhang spielt es keine Rolle, ob es sich bei der Zieldestination direkt um HDFS oder Hive handelt. Flume kommt dann zum Einsatz, wenn man Datenströme verarbeiten und direkt in HDFS importieren will. Dadurch, dass Hive verhältnismässig eng mit SQL verwandt ist, kann man mehr oder weniger einfach Verbindungen zu JBDC- oder ODBC-Datenbanken herstellen.

Koordination und Workflow: Zookeeper und Oozie

Da einige Services Teil eines Hadoop-Clusters sind, werden Tools zur Koordination sowie zur Namensgebung benötigt. Da Knotenpunkte im Netzwerk einmal verfügbar sein können und anschliessend wieder besetzt sind, müssen die Mitglieder eines Clusters untereinander synchronisiert werden. Es ist von zentraler Bedeutung, dass bekannt ist, wo auf Services zugegriffen werden kann und wie diese konfiguriert werden. Zu diesem Zweck gibt es Zookeeper. Produktive Systeme, die auf Hadoop setzen, verfügen oftmals über eine komplexe Pipeline, die zahlreiche Transformationen vornimmt und dabei die unterschiedlichsten Abhängigkeiten untereinander zu berücksichtigen hat. Ein Beispiel: Kommt ein neuer Datenstapel an, wird ein Import ausgelöst. Dieser Import verursacht wiederum neue Berechnungen, die in den abhängigen Datensätzen vorgenommen werden müssen. Mittels Oozie gibt es darüber hinaus ein Tool, das einem erlaubt, Workflows und Abhängigkeiten zu verwalten. Somit benötigt man keine Programmierer, um im Vorfeld massgeschneiderte Lösungen mit hohem Zeitaufwand zu codieren.

Einsatz von Hadoop

Normalerweise greift man auf Hadoop in Form von einer Distribution zu. Dabei handelt es sich um etwas Ähnliches wie eine Linux-Distribution. Anbieter integrieren und testen die Komponenten des Apache-Hadoop-Ökosystems und fügen im Anschluss Tools zur einfacheren Administration hinzu.

Webcode
kt5VZKpd