Apache Hadoop: verteilte Speicherarchitektur für große Datenmengen

Big Data ist das Schlagwort für wachsende Datenmengen. Weltweit entwickeln Unternehmen immer effizientere Methoden, elektronische Daten im großen Stil zu erfassen, auf gigantischen Speicherarchitekturen abzulegen und systematisch zu verarbeiten. Datenmassen im Peta- oder Exabyte-Bereich sind dabei keine Seltenheit. In dieser Größenordnung sind Rechenprozesse von einem einzelnen System nicht zu bewältigen. Big-Data-Analysen setzen daher eine Software-Plattform voraus, die es ermöglicht, komplexe Computing-Aufgaben auf eine große Anzahl an Rechnerknoten zu verteilen. Eine prominente Lösung ist Apache Hadoop, ein Framework, das die Grundlage diverser Distributionen und Big-Data-Suiten stellt.

IONOS Cloud Compute Engine

Mittelständische und große Unternehmen wählen die Cloud Made in Germany. IaaS und PaaS vom Hidden Champion für Hidden Champions.

Sicher
Zuverlässig
Flexibel

Was ist Hadoop?

Apache Hadoop ist ein auf Java basierendes Gerüst für diverse Software-Komponenten, das es erlaubt, Rechenaufgaben (Jobs) in Teilprozesse zu zerlegen, diese auf verschiedene Knoten eines Computerclusters aufzuteilen und somit parallel ablaufen zu lassen. In großen Hadoop-Architekturen kommen dabei mehrere Tausend Einzelrechner zum Einsatz. Dieses Konzept hat den Vorteil, dass jeder Rechner im Cluster nur einen Bruchteil der benötigten Hardware-Ressourcen zur Verfügung stellen muss. Die Arbeit mit großen Datenmassen setzt somit keine High-End-Rechenmaschinen voraus, sondern lässt sich durch eine Vielzahl kosteneffizienter Standardserver bewerkstelligen.

Das Open-Source-Projekt Hadoop wurde 2006 durch den Entwickler Doug Cutting ins Leben gerufen und geht auf Googles MapReduce-Algorithmus zurück. Als der Suchmaschinenanbieter 2004 Informationen über eine Technologie veröffentlichte, die es ermöglicht, komplexe Rechenprozesse auf Basis großer Datenmengen mithilfe eines Computerclusters zu parallelisieren, erkannte Cutting das Potenzial von MapReduce und trieb die Entwicklung in einem eigenen Projekt voran. Unterstützung bekam der Entwickler, der zuvor bei Branchengrößen wie Excite, Apple Inc. und Xerox Parc beschäftigt war und sich bereits mit Apache Lucene einen Namen gemacht hatte, von seinem damaligen Arbeitgeber Yahoo. 2008 wurde Hadoop zum Top-Level-Projekt der Apache Software Foundation. Ende 2011 erreichte das Framework den Release-Status 1.0.0.

Neben dem offiziellen Release der Apache Software Foundation existieren diverse Forks des Software-Frameworks, die Endkunden von verschiedenen Software-Anbietern als unternehmensgerechte Distributionen zur Verfügung gestellt werden. Einen Hadoop-Support gibt es beispielsweise bei Doug Cuttings aktuellem Arbeitgeber Cloudera, der mit CDH eine „enterprise ready“-Open-Source-Distribution bereithält. Ähnliche Produkte finden sich bei Hortonworks und Teradata. Microsoft hat Hadoop in den Cloud-Dienst Azure integriert und auch IBMs InfoSphere BigInsights basiert auf dem Apache-Projekt.

IONOS Cloud Big Data Plattform

Offene Standards für unterschiedliche Szenarien und Architekturen mit flexiblen Big Data Lösungen von IONOS Cloud.

Daten- und Plattform Souveränität
Sichere und skalierbare Datenplattform
Größtmögliche Flexibilität

Die Hadoop-Architektur: Aufbau und Grundkomponenten

Spricht man von Hadoop, ist in der Regel ein umfangreiches Software-Paket gemeint, das auch als Hadoop-Ökosystem bezeichnet wird. In diesem tummeln sich neben den Kernkomponenten (dem Core Hadoop) diverse Erweiterungen, die nicht nur durch seltsame Benennungen wie Pig, Chukwa, Oozie oder ZooKeeper auffallen, sondern das Framework um zahlreiche Zusatzfunktionen für die Verarbeitung großer Datenmengen erweitern. Vorangetrieben werden diese eng verstrickten und aufeinander aufbauenden Projekte ebenfalls unter dem Dach der Apache Software Foundation.

Der Core Hadoop bildet die Grundlage des Hadoop-Ökosystems. Bestandteile des Software-Kerns sind in der Version 1 das Basismodul Hadoop Common, das Hadoop Distributed File System (HDFS) und eine MapReduce-Engine. Ab Version 2.3 wurde letztere durch die Cluster-Verwaltungstechnik YARN (auch MapReduce 2.0 genannt) ersetzt. Diese klammert den MapReduce-Algorithmus aus dem eigentlichen Verwaltungssystem aus, sodass diesem fortan der Status eines Plug-ins zukommt, das auf YARN aufsetzt.

Hadoop Common

Das Modul Hadoop Common stellt allen anderen Komponenten des Frameworks ein Set grundlegender Funktionen zur Verfügung. Dazu gehören die Java-Archivdateien (JAR), die benötigt werden, um Hadoop zu starten, Bibliotheken für die Serialisierung von Daten sowie Schnittstellen für Zugriffe auf das Dateisystem der Hadoop-Architektur und die Remote-Procedure-Call-Kommunikation (RPC) innerhalb des Computerclusters. Zudem finden sich im Hadoop-Common-Modul der Quellcode, die Dokumentation des Projekts sowie Informationen zu Unterprojekten.

Hadoop Distributed File System (HDFS)

Bei HDFS handelt es sich um ein hochverfügbares Dateisystem, das der Speicherung großer Datenmengen in einem Computercluster dient und somit innerhalb des Frameworks für die Datenhaltung zuständig ist. Dazu werden Dateien in Datenblöcke zerlegt und ohne Ordnungsschema redundant auf verschiedene Knoten verteilt. Den Entwicklern zufolge ist HDFS in der Lage, eine Anzahl an Dateien im dreistelligen Millionenbereich zu verwalten. Sowohl die Länge der Dateiblöcke als auch der Grad der Redundanz lassen sich individuell konfigurieren.

Das Hadoop-Cluster funktioniert grundsätzlich nach dem Master-Slave-Prinzip. Die Architektur des Frameworks besteht somit aus einem Master-Knoten, dem eine Vielzahl von Knoten als Slaves untergeordnet sind. Dieses Prinzip spiegelt sich auch im Aufbau des HDFS wieder, das auf einem NameNode und diversen untergeordneten DataNodes basiert. Der NameNode verwaltet sämtliche Metadaten zum Dateisystem, zu Verzeichnisstrukturen und Dateien. Die eigentliche Datenablage erfolgt auf den untergeordneten DataNotes. Um Datenverlust zu minimieren, werden Dateien dabei in einzelne Blöcke zerlegt und mehrfach auf verschiedenen Knoten gespeichert. Die Standardkonfiguration sieht vor, dass jeder Datenblock in dreifacher Ausführung vorliegt.

Jeder DataNode sendet dem NameNode in regelmäßigen Abständen ein Lebenszeichen, den sogenannten Heartbeat. Bleibt dieses Signal aus, erklärt der NameNote den jeweiligen Slave für „tot“ und sorgt mithilfe der Datenkopien auf anderen Knoten dafür, dass trotz des Ausfalls genügend Kopien der betreffenden Datenblöcke im Cluster verfügbar sind. Dem NameNode kommt somit eine zentrale Rolle innerhalb des Frameworks zu. Damit dieser nicht zum „Single Point of Failure“ wird, ist es üblich, diesem Master-Knoten einen SecondaryNameNode zur Seite zu stellen, der sämtliche Veränderungen bezüglich der Metadaten aufzeichnet und somit eine Wiederherstellung der zentralen Kontrollinstanz ermöglicht.

Im Übergang von Hadoop 1 zu Hadoop 2 wurde HDFS um weitere Sicherungssysteme erweitert: NameNode HA (High Availability) ergänzt das System um eine automatische Ausfallsicherung, bei der im Fall eines NameNode-Ausfalls automatisch eine Ersatzkomponente gestartet wird. Eine Snapshot-Funktion ermöglicht zudem, das System in einen früheren Status zurückzuversetzen. Darüber hinaus lassen sich durch die Erweiterung Federation mehrere NameNodes innerhalb eines Clusters führen.

MapReduce-Engine

Ein weiterer Grundbestandteil des Core Hadoop ist der von Google entwickelte MapReduce-Algorithmus, der in der Hadoop-Version 1 noch als eigenständige Engine in das Framework implementiert ist. Zentrale Aufgabe dieser Engine ist das Ressourcenmanagement sowie die Steuerung und das Monitoring von Rechenprozessen (Job-Scheduling/Monitoring). Die Datenverarbeitung beruht dabei im Wesentlichen auf den Phasen „Map“ und „Reduce“, die es ermöglichen, dass Daten direkt am Ablageort verarbeitet werden (Data Locality). Dies beschleunigt die Rechenzeit und verringert den Netzdurchsatz. Im Rahmen der Map-Phase werden komplexe Rechenprozesse (Jobs) in Einzelteile zerlegt und von einem sogenannten JobTracker auf dem Master-Knoten an eine Vielzahl von Slave-Systemen im Cluster verteilt. Dort sorgen sogenannte TaskTracker dafür, dass die Teilprozesse parallelisiert abgearbeitet werden. In der darauffolgenden Reduce-Phase werden die Zwischenergebnisse von der MapReduce-Engine eingesammelt und zu einem Gesamtergebnis zusammengeführt.

Während der Master-Knoten in der Regel die Komponenten NameNode und JobTracker beherbergt, arbeiten auf jedem untergeordneten Slave jeweils ein DataNode und ein TaskTracker. Die folgende Grafik zeigt den Grundaufbau einer Hadoop-Architektur gemäß Version 1, aufgeteilt in MapReduce-Layer und HDFS-Layer.

Mit dem Release der Hadoop-Version 2.3 wurde die MapReduce-Engine grundlegend überarbeitet. Das Ergebnis ist die Cluster-Verwaltungstechnik YARN/MapReduce 2.0, die das Ressourcenmanagement und die Aufgabenverwaltung (Job Scheduling/Monitoring) von MapReduce entkoppelt und das Framework so für neue Verarbeitungsmodelle und eine breite Palette von Big-Data-Anwendungen öffnet.

YARN/MapReduce 2.0

Mit der Einführung des Moduls YARN („Yet Another Resource Negotiator“) ab Version 2.3 wurde die Architektur von Hadoop grundlegend verändert. Man spricht daher auch von einem Übergang von Hadoop 1 zu Hadoop 2. Während Hadoop 1 Nutzern lediglich MapReduce als Anwendung bereitstellt, ermöglicht es die Entkopplung des Ressourcenmanagements und der Aufgabenverwaltung vom Datenverarbeitungsmodell, eine Vielzahl von Big-Data-Anwendungen in das Framework zu integrieren. Folglich ist MapReduce unter Hadoop 2 nur noch eine von vielen möglichen Anwendungen für den Datenzugriff, die sich im Framework ausführen lassen. Dieses ist somit nicht länger als reine MapReduce-Ablaufumgebung zu beschreiben. Stattdessen übernimmt YARN die Rolle eines verteilten Betriebssystems zur Ressourcenverwaltung für Big-Data-Applikationen.

Die grundlegenden Veränderungen der Hadoop-Architektur betreffen vor allem die beiden Tracker der MapReduce-Engine, die in Hadoop 2 nicht mehr als eigenständige Komponenten existieren. Stattdessen setzt das Modul YARN auf drei neue Entitäten: den ResourceManager, den NodeManager und den ApplicationMaster.

  • ResourceManager: Der globale ResourceManager fungiert als höchste Autorität in der Hadoop-Architektur (Master), dem diverse NodeManager als Slave untergeordnet sind. Diesem kommt die Aufgabe zu, das Computer-Cluster zu steuern, die Verteilung der Ressourcen auf die untergeordneten NodeManager zu orchestrieren und Anwendungen zu verteilen. Der ResourceManager weiß, wo sich die einzelnen Slave-Systeme im Cluster befinden und welche Ressourcen diese zur Verfügung stellen können. Eine wichtige Komponente des ResourceManagers ist der ResourceScheduler, der entscheidet, wie die verfügbaren Ressourcen im Cluster verteilt werden.
  • NodeManager: Auf jedem Knoten des Computer-Clusters läuft ein sogenannter NodeManager. Dieser nimmt die Position des Slaves in der Infrastruktur von Hadoop 2 ein und fungiert somit als Befehlsempfänger des ResourceManagers. Wird ein NodeManager auf einem Knoten im Cluster gestartet, meldet dieser sich beim ResourceManager an und sendet ein periodisches Lebenszeichen, den Heartbeat. Jeder NodeManager ist verantwortlich für die Ressourcen des eigenen Knotens und stellt dem Cluster einen Teil davon zur Verfügung. Wie diese Ressourcen im Cluster verwendet werden, wird durch den ResourceScheduler des ResourceManagers gesteuert.
  • ApplicationMaster: Jeder Knoten innerhalb des YARN-Systems beinhaltet einen ApplicationMaster, der Ressourcen vom ResourceManager und vom NodeManager anfragt und in Form von Containern zugeteilt bekommt. Auf diesen Containern werden die Big-Data-Anwendungen vom ApplicationMaster ausgeführt und überwacht.

Hier eine schematische Darstellung der Hadoop-2-Architektur:

Soll eine Big-Data-Anwendung auf Hadoop 2 ausgeführt werden, sind grundsätzlich drei Akteure involviert:

  • ein Client,
  • der ResourceManager und
  • ein oder mehrere NodeManager.

Im ersten Schritt erteilt der Client dem ResourceManager den Auftrag, dass eine Big-Data-Anwendung im Cluster gestartet werden soll. Dieser alloziert infolgedessen einen Container. Mit anderen Worten: Der ResourceManager reserviert Ressourcen des Clusters für die Anwendung und kontaktiert einen NodeManager. Der angesprochene NodeManager startet den Container und führt in diesem einen ApplicationMaster aus, der wiederum dafür zuständig ist, die Anwendung auszuführen und zu überwachen.

Das Hadoop-Ökosystem: Optionale Erweiterungskomponenten

Neben den Kernkomponenten umfasst das Hadoop-Ökosystem diverse Erweiterungen, die in separaten Software-Projekten vorangetrieben werden und einen wesentlichen Beitrag zu Funktionalität und Flexibilität des Software-Frameworks leisten. Aufgrund des offenen Quellcodes und zahlreicher Schnittstellen lassen sich diese optionalen Zusatzkomponenten beliebig mit den Kernfunktionalitäten kombinieren. Folgende Liste zeigt eine Auswahl der beliebtesten Projekte im Hadoop-Ökosystem:

  • Ambari: Das Apache-Projekt Ambari wurde vom Hadoop-Distributor Hortonworks initiiert und ergänzt das Ökosystem um ein Installations- und Managementwerkzeug, das die Provisionierung (Bereitstellung von IT-Ressourcen) sowie die Verwaltung und das Monitoring von Hadoop-Komponenten erheblich erleichtert. Dazu bietet Apache Ambari einen Step-by-Step-Wizard für die Installation von Hadoop-Services auf beliebig vielen Rechnern im Cluster sowie eine Managementfunktion, mit der sich Services zentral starten, stoppen oder konfigurieren lassen. Eine grafische Benutzeroberfläche informiert Anwender über den Status des Systems. Darüber hinaus ermöglicht es Ambari mit dem Ambari Metrics System und dem Ambari Alert Framework, Metriken aufzuzeichnen und Alarmstufen zu konfigurieren.
  • Avro: Bei Apache Avro handelt es sich um ein System zur Serialisierung von Daten. Avro greift auf JSON zurück, um Datentypen und Protokolle zu definieren. Die eigentlichen Daten hingegen werden in einem kompakten Binärformat serialisiert. Dieses dient als Datenübertragungsformat für die Kommunikation zwischen den verschiedenen Hadoop-Knoten sowie zwischen Hadoop-Services und Clientprogrammen.
  • Cassandra: Apache Cassandra ist ein in Java geschriebenes, verteiltes Datenbankverwaltungssystem für große strukturierte Datenmengen, das einen nichtrelationalen Ansatz folgt. Man spricht in diesem Zusammenhang auch von NoSQL-Datenbanken. Ziel des ursprünglich von Facebook entwickelten Open-Source-Systems ist eine hohe Skalierbarkeit und Ausfallsicherheit in großen, verteilten Architekturen. Die Datenablage erfolgt auf Basis von Schlüssel-Wert-Relationen.
  • HBase: Auch bei HBase handelt es sich um eine quelloffene NoSQL-Datenbank, die Schreib- und Lesezugriffe in Echtzeit auf große Datenmengen innerhalb eines Computerclusters ermöglicht. HBase fußt auf dem von Google entwickelten Hochleistungsdatenbanksystem BigTable. Im Vergleich zu anderen NoSQL-Datenbanken zeichnet sich HBase durch eine hohe Datenkonsistenz aus.
  • Chukwa: Bei Chukwa handelt es sich um ein Datenerfassungs- und Analysesystem, das auf HDFS und MapReduce des Hadoop-Big-Data-Frameworks aufsetzt und ein Echtzeit-Monitoring sowie Datenanalysen in großen, verteilten Systemen erlaubt. Dazu setzt Chukwa auf Agents, die auf jedem zu überwachenden Knoten laufen und Logdateien der dort ausgeführten Anwendungen sammeln. Diese Dateien werden an sogenannte Collectors übermittelt und dort im HDFS gespeichert.
  • Flume: Auch Apache Flume ist ein Service, der für das Sammeln, Aggregieren und Bewegen von Log-Daten konzipiert wurde. Um Daten zu Speicher- und Analysezwecken von verschiedenen Quellen an HDFS zu streamen, setzt Flume auf Transportformate wie Apache Thrift oder Avro.
  • Pig: Bei Apache Pig handelt es sich um eine Plattform zur Analyse großer Datenmengen, die Hadoop-Anwendern die High-Level-Programmiersprache Pig Latin zur Verfügung stellt. Diese erlaubt es, den Datenfluss von MapReduce-Jobs auf einer abstrakten Ebene zu beschreiben. MapReduce-Abfragen werden somit nicht mehr in Java erstellt, sondern in der deutlich effizienteren Sprache Pig Latin programmiert, was die Verwaltung von MapReduce-Jobs deutlich vereinfacht. So lässt sich beispielsweise die parallele Ausführung komplexer Analysen besser nachvollziehen. Pig Latin wurde ursprünglich von Yahoo entwickelt. Der Name geht auf den Entwicklungsansatz der Software zurück: Wie ein „Allesfresser“ ist Pig darauf ausgelegt, alle Arten von Daten (strukturierte, unstrukturierte oder relationale) zu verarbeiten.
  • Hive: Mit Apache Hive lässt sich Hadoop um eine zentrale, für Analysezwecke optimierte Datenbank, ein sogenanntes Data-Warehouse, erweitern. Die Software wurde von Facebook entwickelt und basiert auf dem MapReduce-Framework. Mit HiveQL verfügt Hive über eine SQL-ähnliche Syntax, die es ermöglicht, in HDFS gespeicherte Daten abzufragen, zusammenzufassen oder zu analysieren. Dazu übersetzt Hive SQL-artige Abfragen automatisch in MapReduce-Jobs.
  • HCatalog: Eine Kernkomponente von Apache Hive ist HCatalog, ein Metadaten- und Tabellen-Managementsystem, das es erlaubt, Daten unabhängig vom Format oder der Struktur zu speichern und zu verarbeiten. Dazu beschreibt HCatalog die Struktur der Daten und erleichtert so die Verwendung durch Hive oder Pig.
  • Mahout: Apache Mahout erweitert das Hadoop-Ökosystem um einfach erweiterbare Java-Bibliotheken für Data-Mining-Anwendungen und mathematische Anwendungen für maschinelles Lernen. Algorithmen, die sich mit Mahout in Hadoop implementieren lassen, ermöglichen Operationen wie Klassifizierung, Clustering und kollaboratives Filtern. In der Praxis kommt Mahout beispielsweise bei der Entwicklung von Empfehlungsdiensten zum Einsatz („Kunden, die diesen Artikel gekauft haben, kauften auch …“).
  • Oozie: Die optionale Workflow-Komponente Oozie ermöglicht es, Prozessketten aufzubauen, diese zu automatisieren und zeitgesteuert auszuführen. Somit kompensiert Oozie das Defizit der MapReduce-Engine des Hadoop 1, mit der sich in der Grundkonfiguration keine Abhängigkeiten zwischen MapReduce-Job erzeugen lassen.
  • Sqoop: Bei Apache Sqoop handelt es sich um eine Software-Komponente, die den Import und Export großer Datenmengen zwischen dem Hadoop-Big-Data-Framework und strukturierten Datenspeichern erleichtert. Daten werden in Unternehmen heutzutage in der Regel in relationalen Datenbanken gespeichert. Sqoop ermöglicht einen effizienten Austausch zwischen diesen Speichersystemen und dem Computercluster.
  • ZooKeeper: Apache ZooKeeper schließlich bietet Services, um Prozesse im Cluster zu koordinieren, indem es Funktionen zur Speicherung, Verteilung und Aktualisierung von Konfigurationsinformationen bereitstellt.

Hadoop im Unternehmen

Da sich Hadoop-Cluster zur Verarbeitung großer Datenmengen mithilfe von Standardrechnern aufbauen lassen, erfreut sich das Big-Data-Framework in zahlreichen Unternehmen großer Beliebtheit. Zu namhaften Hadoop-Nutzern gehören Adobe, AOL, eBay, Facebook, Google, IBM, LinkedIn, Twitter und Yahoo. Neben der Möglichkeit, Daten unkompliziert auf verteilten Architekturen speichern und parallel verarbeiten zu können, sprechen vor allem Stabilität, Erweiterbarkeit und der Funktionsumfang für die Open-Source-Software.