Hadoop einfach erklärt!

Apache Hadoop ist eine verteilte Big Data Plattform, die von Google basierend auf dem Map-Reduce Algorithmus entwickelt wurde, um rechenintensive Prozesse bis zu mehreren Petabytes zu erledigen.

Hadoop ist eines der ersten Open Source Big Data Systeme, die entwickelt wurden und gilt als Initiator der Big Data Ära. Das verteilte Big Data Framework ist in der Lage sehr große Datenmengen zu speichern und mit hoher Geschwindigkeit zu verarbeiten. Ursprünglich von Google Inc. designed, wurde Apache Hadoop bereits 2008 als Top Level Open Soucre Projekt der Apache Foundation eingestuft.

Mittlerweile ist Hadoop das bekannteste Big Data Ökosystem und jeder sollte die wichtigsten Eigentschaften kennen:

Was ist Apache Hadoop?

Durch die verteilte Architektur von Apache Hadoop, ist es in der Lage durch Parallelisierung extrem große Datenmengen sehr performant in einem Cluster zu verarbeiten. Um genauer zu verstehen, was Hadoop Cluster eigentlich ist und wie es sich zusammensetzt, gehe ich im Folgenden auf die Komponenten, das HDFS Dateisystem und Erweiterungen ein.

Hadoop Komponenten

Hadoop besteht auf verschiedenen Komponenten: HDFS, YARN, MapReduce und einigen Erweiterungen, die man auch dazuzählen sollte. Die folgende Grafik gibt einen grundsätzlichen Überblick des Systems.

Apache Hadoop Komponenten
Hadoop Komponenten

Nun zu den einzelnen Komponenten von Hadoop…

HDFS – Hadoop Distributed File System

Das Herzstück von Hadoop ist das verteilte Dateisystem Hadoop Distributed File System (HDFS). HDFS ist ein hochverfügbares, verteiltes Dateisystem zur Speicherung von sehr großen Datenmengen, welches in Clustern von Servern organisiert ist. Dabei werden die Daten auf mehreren Rechnern (Nodes) innerhalb eines Clusters abgespeichert, das passiert in dem die Dateien in Datenblöcken mit fester Länge zerlegt und redundant auf den Knoten verteilt.

HDFS Aufbau eines HDFS Filesystems mit Name Node Data Nodes
HDFS Aufbau File System Name Node & Data Nodes

Anders als in einer klassischen Datenbank legt Hadoop einzelne Files in dem Dateisystem ab, die nach bestimmten Kriterien partitioniert sind und auf dem Dateisystem einzusehen sind.

Ein Hadoop System arbeitet in einem Cluster aus Servern, welche aus Master- und Slavenodes bestehen. Der Masternode, der auch NameNode genannt wird, ist für die Verarbeitung aller eingehenden Anfragen zuständig und organisiert die Speicherung von Dateien sowie den dazugehörigen Metdadaten in den einzelnen Datanodes (oder Slave Nodes). HDFS ist auf große Datenmengen ausgelegt und kann Dateisysteme bis zu mehreren Millionen Dateien erstellen.

Die Dateiblocklänge als auch Replikationsgrad sind frei konfigurierbar, was aus meiner Erfahrung einen großen Einfluss auf die Performance von Hadoop hat. Hier gibt es mehr Informationen über Replikation und Dateiblockgröße in Bezug auf Performance.

In der Praxis sehe ich immer weniger HDFS Dateisysteme, da die Cloudinfrastruktur auch in Deutschland so langsam Fahrt aufnimmt. So werden viele Big Data Projekte schon in der Cloud auf intelligenten Speicher Systemen wie AWS S3 oder Azure BlobStore gestartet, da diese oft Kosteneffizienter und viel einfacher zu bedienen sind.

YARN – Yet Another Resource Negotiator

YARN ist der Resource Manager von Hadoop und ist dafür zuständig die angefragten Resourcen (CPU, Speicher) eines Hadoop Clusters der verschiedenen Jobs zu verteilen. So können bestimmte Jobs mehr oder weniger Ressourcen zugeordnet werden, was pro Anwendung und Nutzer konfiguriert werden kann.

MapReduce Algorithmus

Hadoop basiert auf dem MapReduce Algorithmus, welcher konfigurierbare Klassen für Map, Reduce und Kombinationsphasen bereitstellt. MapReduce ist leider schon etwas in die Jahr gekommen und gilt in der Szene als veraltet, daher wird es zunehmend durch Directred-Acyclic-Graph (DAG) basierte Engines ersetzt. Apache Spark z.B. basiert auch auf einem gerichteten azyklischen Graphen und kann ebenfalls für Abfragen eingesetzt werden.

Aus meiner Erfahrung empfehle ich MapReduce nicht mehr einzusetzen und lieber auf neue Ausführungsverfahren (TEZ, Spark) wechseln, um so nicht auf Performance zu verzichten.

Directed-Acyclic-Graph (DAG)

Ein DAG kommt aus der Graphentheorie und ermöglich die performante Ausführung von komplexen verteilten Algorithmen. Verschiedene Ausführungsverfahren wie Apache Spark oder Apache TEZ machen performante Datenverarbeitung im Hadoop Umfeld möglich.

Dateiformate und Kompression

Hadoop unterstützt verschiedene Dateiformate und ist in der Lage strukturierte sowie unstrukturierte Formate, wie bspw. einfache Formate wie  CSV, JSON oder hochoptimierte strukturierte Formate wie ORC und Parquet zu lesen. Ebenfalls ist das schemabasierte Formate Apache Avro eine gute Option, um Daten zu strukturieren und nutzbar zu machen.

Hadoop Erweiterungen

Auf Basis von Hadoop wurden viele viele Erweiterungen entwickelt, die bestimmte Funktionalitäten zu Hadoop hinzufügen oder es ermöglichen einfacher auf das Dateisystem HDFS zuzugreifen. Hier gebe ich nur einen kleinen Überblick über die wichtigsten Erweiterungen.

Apache Hive

Hive Logo

Hive erweitert Hadoop um eine Funktionalitäten eines DWHs und es werden Abfragen in einer SQL basierenden Sprache auf das Hadoop Filesytsem möglich. Mit der HiveQL-Syntax, die nah an der SQL:1999 Standard ist, können Anwender und Programmierer Programme zur Datenverarbeitung (ETL) schreiben und verschieden Skripte ausführen. HiveQL übersetzt den geschriebenen SQL-Code in MapReduce-Jobs oder einen DAG.

Mit Apache Hive sind mittlerweile schon viele Unternehmen vertraut und es hat einen gewissen Standard erreicht. Da viele Entwickler mit SQL sehr vertraut sind, wird Hive gerne in Produktionsumgebungen genutzt wird.

In Hive werden natürlich viele gängige SQL Standard Operationen wie Joins, Date-Funktionen, Filter , Aggregationsfunktionen sowie Window-Funktionen zur Verfügung gestellt. Anders als relationale Datenbanken, die Schema-on-Write (SoW) nutzen, arbeitet Hive den Schema-on-Read (SoR) Konzept, welches erst bei lesen der Daten nach einem gewissen Schema prüft. Dadurch können Datenstrukturen sehr agil sein und unstrukturierte Daten werden unterstützt.

HBase

hbase logo Big Data Plattform mit Hadoop

HBase ist eine spaltenorientierte Datenbankerweiterung für das verteilte Hadoop File System (HDFS). Anders als in relationalen Datenbanken kann man in HBase kein SQL Code für Abfragen nutzen und stehen für die Entwicklung von Applikationen stehen Java, Apache Avro, REST oder Thrift zur Verfügung.

In einem HBase System werden Tabellen gehalten, mit Zeilen und Spalten, wie in einer relationalen Datenbank. Jede Tabelle muss einen definierten primär Schlüssel haben und wenn auf die Daten zugegriffen wird, muss dieser Schlüssel genutzt werden. Ein Vorteil vo HBase ist die Möglichkeit von “Sparse” Tabellen anzulegen.

Spark

Spark kann durch das DataSource API ebenfalls auf HDFS zugreifen und als performante Engine für die Datenverarbeitung genutzt werden. So kannst du bspw. mit Spark einen ETL mit Spark durchführen und das fertige Flatfile auf HDFS abspeichern.

Tez

Tez ist eine Open Source Framework, was als perfromante Ausführungsengine auf Hadoop genutzt werden kann. Genutzt wird dabei ein Directred-Acyclic-Graph (DAG), was als deutlich performatere Ausführungsengine als Hadoop MapReduce gilt. Hier ein Vergleich von der offinziellen Apache TEZ Seite:

Hive MapReduce Prozess ohne DAG
Hive mit MapReduce
Tez Query optimized by DAG
Hive on TEZ nach DAG optimiert

In der Grafiken ist deutlich zu erkennen, dass die Ausführung anhand eines DAGs deutlich optimiert wird. Diese Optimierung führt zu schnelleren Abfragen und allgemein mehr Performance auf Hadoop.

Was ist ein Hadoop Cluster?

Ein HadoopCluster ist ein Zusammenschluss von Servern zu einem Computer-Cluster, was die Speicherung und Analyse von enormen Datenmengen ermöglicht. Durch die verteilte Rechenleistung wird besonders rechenintensive Datenverarbeitung möglich.

Was ist MapReduce? Map Reduce Algorithmus

MapReduce ist das Herzstück von Apache Hadoop. Das Programmierkonzept erlaubt die massive Skalierung von tausenden von Servern innerhalb eines Hadoop Clusters. Das Konzept ist eigentlich relativ einfach zu verstehen und wie der Name schon sagt, besteht es aus zwei einzelnen Tasks: Map & Reduce.

Der erste Prozess ist der Map Job, dieser nimmt ein Set von Daten und konvertiert diese in ein anderes Set von Daten, wo die individuellen Elemente der Daten in Tupel (Key/Value Pairs) zusammen gefasst werden.

Der Reduce Job nimmt den Output von dem Map Job und kombiniert die gebildeten Tupel in kleinere Menge von Tupel. Ein Reduce Job kommt immer nach dem Map Job. Folgende Grafik zeigt einen MapReduce Job am Beispiel eines Word Counts.

Hadoop MapReduce Word Count Beispiel
Hadoop MapReduce Beispiel – Word Count

Was ist der Unterschied zwischen Hadoop und einer relationalen Datenbank?

Der Unterschied zwischen einem Hadoop System und einer relationalen Datenbank ist signifikant. Folgend zeige ich euch die größten Unterschiede.

  1. Hadoop ist im engsten Sinne keine wirkliche Datenbank, sondern mit HDFS ein redundatentes und parrallelisiertes Dateisystem.
  2. Relationale Datenbanken basieren auf dem ACID Prinzip: Atomicity, Consistency, Isolation and Durability. Hadoop basiert verfolgt nicht dieses Prinzip d.h. wenn man beispielsweise einen Use Case eines Guthabenaccounts nachbauen möchte, muss man alle möglichen Szenarios nachbauen (Was passiert wenn ein Guthaben gebucht wird und ein Fehler tritt auf?).
  3. Hadoop ermöglicht massive Skalierung der Rechenleistung und Speicherkapazitäten mit relativ kleinen Kosten im Vergleich zu einem RDBMS.
  4. Parallelisierung von Prozessen und somit die Verarbeitung von sehr große Datenmengen ist in Hadoop möglich.
  5. Oft wird gesagt der Hauptunterschied zu RDBMS darin liegt, dass diese nicht in der Lage sind mit unstrukturierten Daten zu arbeiten. Aber eigentlich gibt es doch einige RDBMS, die mit unstrukturierten Daten arbeiten können. Natürlich ist die Performance, wenn die Datenmenge groß wird, irgendwann ein Problem.
  6. Eine weitere Sache die ich oft höre, ist Hadoop ist
  7. Hive SQL ist immer langsamer als ein SQL Behelf auf einer realtionalen Datenbank. Jeder der glaubt Hive ist schneller bei der gleichen (kleineren) Datenmenge, wird oft enttäuscht sein.
  8. Die Parallelisierung und Skalierung ist Hadoops Stärke, somit ist kaum eine Grenze in der Größe der Daten gesetzt.

Lasst uns die zwei Systeme Hadoop und RDBMS nochmal im direkten Vergleich angucken:

EigenschaftRDBMSHadoop
Datenvielfalt
Vornähmlich strukturierte DatenStrukturierte, Semi-Strukturierte and unstrukturierte daten
DatenspeicherDurchschnittlich eher GBSFür große Datenmengen im TB und PB-Bereich
AbfragenSQLHQL (Hive Query Language)
SchemaSchema on write (static schema)Schema on read (dynamic schema)
GeschwindigkeitLiest sehr schnellLesen und Schreiben schnell, aber bei geringeren Datenmengen ist die RDBMS schneller
Kostenmeistens LizenzKostenlos
Use CaseOLTP (Online transaction processing)Analytics (Audio, video, logs etc), Data Discovery
DatenobjekteRelationale TabellenKey/Value Pair
DurchsatzGeringHoch
SkalierbarkeitVertikial (Scale Up)Horizontal (Scale Out)
Hardware
High-End ServerCommodity/Utility Hardware
IntegritätHoch (ACID)Gering

Was ist der Unterschied zwischen Hadoop MapReduce und Apache Spark?

Oft wird mir die Frage gestellt: Wie unterscheidet sich Spark vs. Apache Hadoop?

In diesem Artikel gebe ich einen grundsätzlichen Überblick über Apache Spark und warum Spark viele Vorteile gegenüber Hadoop hat.

Beide basieren auf dem Konzept der Verteilung von Daten und Arbeitsschritten in einem Cluster, aber unterscheiden sich grundsätzlich in der Architektur und Möglichkeiten der Datenverarbeitung:

Spark vs. Hadoop wo ist der Unterschied?
Spark vs. Hadoop: Die Unterschiede

Der Vergleich zeigt, dass Spark in der Verarbeitung von Daten viele Vorteile hat, dennoch kommt HDFS für die langfristige Speicherung von großen Datenmengen öfter zu Einsatz. Durch den Vormarsch der Cloudtechnologie von Amazon und Microsoft wird das HDFS langsam abgelöst und durch intelligente Dienste wie Amazon S3 ersetzt.

Zusammenfassung

Hadoop ist eines der weitverbreitesten Big Data Plattformen und mit dem starken Dateisystem HDFS ein oft eingesetztes Dateisystem im Big Data Umfeld. Die vielen Erweiterungen von Hadoop, geben einem viele Möglichkeiten HDFS für verschiedenste Prozesse und Datenverarbeitungen einzusetzen. Wenn Hadoop HDFS zum Einsatz kommt, solltest du dir gut überlegen welche Ausführungsengien du einsetzen möchtest. Denn MapReduce ist in die Jahre gekommen und hat einige Nachteile in Bezug auf Performance. Hier gibt es zum Beispiel TEZ oder Spark, die du einsetzen kannst. Beide werden nach einem DAG optimiert und somit sind diese MapReduce überlegen.

Auch HDFS wir heute schon häufig durch andere Objekt Stores wie AWS S3 oder Microsoft Blob Store erstzt, diese haben den Vorteil, dass sie kaum Gewartet werden müssen.

Ihr Ansprechparnter: Laurenz Wuttke

Wir entwickeln Künstliche Intelligenz, mit der Sie mehr aus Ihren Kundendaten machen – für wachsende Umsätze und eine nachhaltig hohe Kundenzufriedenheit.

Auch interessant für Sie