Verarbeiten großer verteilter Datenmengen mit Hadoop

Werkzeuge  –  Kommentare

Internetfirmen müssen für den Betrieb ihrer Dienste täglich Datenmengen im Giga- und Petabereich speichern und effizient verarbeiten. Den Part der Datenverarbeitung können Googles MapReduce oder die Open-Source-Nachbildung Hadoop übernehmen, indem sie die Eingabedaten in Teilstücke partitionieren, um sie anschließend als unabhängige Teilaufgaben bearbeiten zu können.

Ein architektonischer Ansatz zur Bewältigung großer Datenmengen ist das verteilte Rechnen in Clustern, wobei kleinere schwache Systeme eine Aufgabe gleichzeitig angehen, anstatt sie auf einem einzelnen großen System sequenziell zu bearbeiten.

Firmen wie Facebook, Google und Yahoo stehen für den Betrieb ihrer Dienste genau vor der Aufgabe, täglich Datenmengen im Giga- und Petabereich speichern und effizient verarbeiten zu können. Bei Google führte das zur Entwicklung des Google File Sytem (GFS), eines nach dem Master-Slave-Prinzip arbeitenden verteilten Cluster-Dateisystems. Eine der Hauptanforderungen an das GFS war die Fehlertoleranz bei Hardwareausfällen, da das GFS auf Standardhardware betrieben werden sollte. Diese Anforderung erfüllte Google durch Replikation.

Damit hatte Google einen Teil der Aufgabe gelöst: die Datenspeicherung. Offen blieb damit nur die Verarbeitung. Herkömmlicherweise werden die zu verarbeitenden Daten zum Programm gebracht. Das Programm startet auf dem einen Rechner und holt sich die benötigten Daten aus einer anderen Quelle wie einer Datenbank. Dieser Weg war für Google bei den zu verarbeitenden Datenmengen nicht gangbar, denn der Netzdurchsatz für den Datentransfer erwies sich als Flaschenhals für die gesamte Verarbeitung. Daher muss die Verarbeitung der Daten dort stattfinden, wo die Daten gespeichert wurden. Das Prinzip wird als Data Locality bezeichnet.

Google entwickelte hierfür das MapReduce-Programmiermodell, das die Daten in kleine Teile aufteilt und zur gleichzeitigen Verarbeitung auf unterschiedliche Rechner verteilt. Das Endergebnis entsteht durch die Zusammenführung aller Teilergebnisse. MapReduce bot damit eine Lösung zur Verarbeitung verteilter Daten und ermöglichte eine gute Integration mit dem GFS. Google stellte beide, MapReduce und das Google File System, 2003 und 2004, vor und öffnete damit den Weg für Open-Source-Implementierungen. Seine eigenen Implementierungen stellte Google nicht zur Verfügung.

Doug Cutting implementierte MapReduce 2005 für Nutch und legte damit die Grundlage für das quelloffene Hadoop-Projekt, eine Implementierung von GFS und MapReduce. Nachdem Hadoop 2006 zuerst als Lucene-Subprojekt startete, erhielt es 2008 die Weihen eines Top-Level-Projekts der Apache Software Foundation (ASF) und beherbergt heute eigene Subprojekte. Im Juli 2009 gewann ein Cluster mit dem Hadoop-Framework zweimal den Terabyte Sort Benchmark, der in unterschiedlichen Kategorien die leistungsfähigsten Systeme zur Datensortierung bestimmt. Ein Hadoop-Cluster von Yahoo konnte 100 Terabyte in zwei Stunden und 53 Minuten sortieren.

Im Lauf der Zeit wurde das Hadoop-Projekt mehrfach umstrukturiert, um der fortschreitenden Entwicklung Rechnung zu tragen. Hadoop besteht heute im Wesentlichen aus den drei Komponenten Hadoop Common, Hadoop Distributed File System (HDFS) sowie MapReduce und arbeitet nach dem Master-Slave-Prinzip. Ein Knoten im Cluster übernimmt die Rolle des Masters, der die Arbeit der restlichen Knoten koordiniert.

Hadoop Common stellt die Grundfunktionen bereit, die alle anderen Komponenten benötigen. Dazu zählen eine implementierungsneutrale Filesystem-Schnittstelle, die Schnittstelle für die "Remote Procedure Call"-Kommunikation im Cluster und Bibliotheken für die Serialisierung von Daten. Das HDFS ist das Standarddateisystem des Hadoop-Frameworks. MapReduce bietet alle Funktionen, um nach dem Programmiermodell zu entwickeln. Neben HDFS lassen sich andere Systeme für die Speicherung der Daten einsetzen, darunter CloudStore und Amazons S3.

Mit den drei Komponenten kann man einen vollständigen Hadoop-Cluster aufbauen. Als Produktionsbetriebssystem für die einzelnen Knoten eines Hadoop-Clusters wird in der Hadoop-Dokumentation Linux empfohlen, wobei sich Hadoop-Cluster auch auf Basis anderer Unix-artiger Systeme wie FreeBSD oder Solaris aufbauen lassen. Für die gewählte Plattform muss Suns JDK ab Version 1.6 verfügbar sein. Der Betrieb mit OpenJDK ist nicht möglich. Über die Projekt-Website lässt sich das derzeit aktuelle Release 0.20.2 herunterladen. Hadoop-Nutzer wie Yahoo, A9 (Amazons Suchmaschine) oder last.fm betreiben Hadoop-Cluster in Größenordnungen von 10 bis zu mehreren tausend Knoten.

Yahoos größte Installation umfasst beispielsweise 4000 Knoten. Daher ist es schwer, eine Empfehlung für das Dimensionieren eines Hadoop-Clusters zu geben, da das wesentlich von der geplanten Verwendung abhängt. Ausnahme ist das Größenverhältnis des Master-Knotens zu den restlichen Knoten der Cluster: der Masterknoten muss über mehr Leistung und Arbeitsspeicher verfügen als die übrigen Knoten. Das liegt unter anderem daran, dass einzelne Framework-Komponenten, die auf dem Master laufen, aus Performancegründen sämtliche Informationen im Arbeitsspeicher halten und dadurch teure I/O-Operationen vermeiden.

Für erste eigene Schritte unterstützt Hadoop einen pseudoverteilten Modus, bei dem alle Komponenten auf einem einzigen Rechner in einem eigenen Prozess laufen. Hierfür reicht ein normaler Arbeitsplatzrechner wie das eigene Notebook. Damit lassen sich eigene MapReduce-Anwendungen einfach entwickeln und testen, allerdings können in dieser Konfiguration keine Schlussfolgerungen auf die Performance der Anwendung in einem Cluster gezogen werden.

Eine detaillierte Installationsanleitung findet sich auf der Projekt-Website. Die Einrichtung eines echten Clusters dürfte dank der Projektdokumentation für Benutzer mit Unix-Hintergrund keine Hürde darstellen. Die US-Firma Cloudera stellt für die vereinfachte Installation RPM- und Debian-Packages bereit. Für eine erste Begegnung mit Hadoop offeriert sie ein freies VMWare-Image, das lediglich den kostenlosen VMWare Player voraussetzt.

Wer im nächsten Schritt sich für die Entwicklung eigener MapReduce-Anwendungen entschieden hat, aber keinen eigenen Cluster bereitstellen kann oder möchte, kann mit Amazons Elastic MapReduce Hadoop als SaaS-Angebot im Rahmen der Amazon-Webservices nutzen. Mit deren EC2 (Elastic Cloud) lässt sich auch ein individueller Hadoop-Cluster konfigurieren.