1.3 Grundlagen von Hadoop

Ich möchte dir während deines Tutorials auch jede Menge Grundlagen zum Thema mit auf den Weg geben. Damit es sich einfacher liest, fasse ich dir alles übersichtlich in Stichpunkten zusammen.

Was ist Hadoop eigentlich? 

Es ist ein kosteneffizientes Open-Source-Framework für die verteilte Speicherung und Verarbeitung großer Datensätze aus mehreren Quellen.

https://de.hortonworks.com/products/data-platforms/hdp/
  • Ein Hadoop-System ist ohne Probleme erweiterbar.
  • Hadoop ist für sehr große Datenmengen ausgelegt (ab 1 Terabyte Daten) und benötigt meist sehr viel Arbeitsspeicher zur Ausführung von Verarbeitungsprozessen.
  • Hadoop ist bei nahezu allen Services redundant betreibbar.
  • Die Services bieten vom Import über die Speicherung bis hin zur Verarbeitung und Auswertung viele Möglichkeiten an.

Wie entstand Hadoop?

  • Google schrieb 2003 bis 2004 wissenschaftliche Aufsätze zum Thema GFS (Google File System), was verteilten Speicher auf mehreren Systemen beschreibt und die Urform des in Hadoop eingesetzten Dateisystems „HDFS“ ist. Darin wurde auch „MapReduce“ erwähnt, dem Prozess zum Bearbeiten von Daten.
  • Hadoop wurde ursprünglich von Doug Cutting und Tom White im Jahr 2006 entwickelt.
  • Das Maskottchen ist ein gelber ausgestopfter Elefant, der den Namen Hadoop getragen hat. Es war das Lieblingsspielzeug seines Kindes. 
  • Hadoop entwickelt sich stetig weiter, sowohl als Weiterentwicklung als auch disruptiv durch komplette Neuentwicklungen.

Warum sollte ich Hadoop einsetzen?

  • Vertikale Skalierung bringt nicht den gewünschten Erfolg beim Planen von Systemen mit der Verarbeitung großer Datenmengen: Zugriffszeiten auf Festplatten sind nicht besser, je mehr Daten man auf ihr hat, Hardwarefehler sind nur schwer zu verhindern und die Zeiten zum Verarbeiten der Daten steigen mit der Menge der Daten deutlich an.
  • Horizontale Skalierung funktioniert nur linear.
  • Hadoop war ursprünglich nur für Batch-Verarbeitung konzipiert gewesen. Es wurde jedoch schnell erkannt, dass große Datenmengen mit Hadoop sehr gut verarbeitet werden können.
  • Mittlerweile ist es ein Quasi-Standard in der Verarbeitung großer Datenmengen und wird von allen großen Techfirmen wie Google, Facebook, Twitter, Mobilfunkbetreibern oder auch Handelskonzernen verwendet.

Was gehört alles zu Hadoop?

In dieser Grafik findest du eine grobe Übersicht über die wichtigsten Hadoop-Services, die es gibt. Nachfolgend gebe ich dir kurz die wichtigsten Infos. Auf den folgenden Seiten schauen wir uns jeden Service noch einmal genauer an.

HDFS

  • HDFS = Hadoop Distributed File System
  • es ist die Grundlage für Hadoop, da es die Speicherung verschiedenartiger großer Datenmengen ermöglicht
  • HDFS arbeitet als Abstraktionsschicht, da wir die Daten nur in HDFS sehen und nicht bemerken, dass diese über das Cluster verteilt gesichert sind
  • die Logdateien über die gespeicherten Dateien sind in den „HDFS Metadata“ gesichert
  • HDFS besteht aus NameNodes und DataNodes
  • NameNodes enthalten die Metadaten, wo welche Dateien gespeichert sind
  • DataNodes verwalten die Daten selbst auf der Hardware
  • die Kommunikation findet immer über den NameNode statt, welcher dann die Anfrage an den richtigen DataNode weiterleitet

YARN

  • YARN ist das „Hirn“ von Hadoop, da hier alle Ressourcen des Clusters auf die verschiedenen Services verteilt werden und verschiedene Aufgaben von YARN gesteuert ablaufen
  • dabei besteht YARN vorwiegend aus ResourceManagern und NodeManagern
  • ResourceManager erhalten die Aufgaben, welche vom Hadoop-System zu erledigen sind und weißt diese dem NodeManager zu, welcher freie Ressourcen hat
  • Der NodeManager wird auf jedem DataNode installiert, also jedem Server, der nur für die Datenverarbeitung zuständig ist. Er ist für die Ausführung jeder zugewiesenen Aufgabe verantwortlich.
  • weitere Komponenten sind beispielsweise Schedulers, welche den zeitlichen Ablauf oder die zeitliche Steuerung von Aufgaben im Hadoopcluster übernehmen

MapReduce

  • auch eine Kernkomponente von Hadoop, welche die Logik zum Verarbeiten der Datenmengen enthält
  • MapReduce ist ein Software-Framework, welches das Entwickeln von Anwendungen unterstützt und mittels verteilten und parallelen Ausführungen von Algorithmen die Verarbeitung großer Datenmengen ermöglicht
  • MapReduce besteht aus 2 Funktionen: Map() und Reduce()
  • Map() enthält Funktionen wie das Filtern, das Gruppieren oder das Sortieren
  • Reduce() enthält das Zusammenfassen von Ergebnissen, welche die Map-Funktion liefert

Apache PIG

  • PIG besteht aus „Pig Latin“, der Sprache, und „Pig Runtime“, der Ausführungsumgebung. Die Verteilung ist vergleichbar mit der Sprache Java und JVM in der Welt von Java.
  • Pig Latin ist an SQL angelehnt und vereinfacht massiv das Entwickeln von Abfragen, da 10 Zeilen von Pig Latin bis zu 200 Zeilen eines MapReduce-Algorithmus ersetzen.
  • Der interne Compiler schreibt die Pig Latin-Anwendungen in MapReduce-Jobs oder Tez-Jobs um.

Apache HIVE

  • wurde von Facebook entwickelt, um eine SQL-ähnliche Sprache in Hadoop zur Verfügung zu haben
  • HIVE ist eine Data Warehouse-Komponente, die das Schreiben, Lesen und Verwalten großer Datensätze in einem Cluster übernimmt
  • die Sprache, die bei HIVE zum Einsatz kommt, lautet HQL (SQL+HIVE=HQL)
  • HIVE besteht vorwiegend aus der HIVE Command Line, in dessen Interface die Befehle abgesetzt werden können, und dem JDBC/ODBC-Treiber, welcher die Verbindung zu den Datenquellen und Datenbanken ermöglicht
  • Hive ist skalierbar, da es das Abfragen großer Datenmengen und das Verarbeiten von Livedaten kombiniert zur Verfügung stellen kann

Apache SPARK

  • Spark ist ein Framework für Echtzeitdatenverarbeitung in einem Hadoopcluster
  • Spark wurde ursprünglich an der Universität von Kalifornien in Berkeley entwickelt und basiert auf der Programmiersprache Scala
  • durch in-memory-Verarbeitung ermöglicht Spark eine höhere Geschwindigkeit zur Datenverarbeitung als MapReduce (etwa 100x schneller bei großen Datensätzen)
  • da es jedoch nicht gerade ressourcensparend arbeitet, wird trotzdem noch MapReduce eingesetzt

Apache HBASE

  • Hbase ist eine OpenSource-, nichtrelationale Datenbank (bzw. eine NoSQL-Datenbank)
  • wie jede andere NoSQL-Datenbank kann hier jede Art von Datum gespeichert werden
  • es ist nach Googles „BigTable“-Modell aufgebaut, welches als Ursprungsprinzip für eine verteilte Datenspeicherung auf einem Rechnerverbund gilt
  • HBase basiert auf dem Datenspeicherungssystem HDFS und ermöglicht eine fehlertolerante Speicherung
  • HBase selbst ist in Java geschrieben, während HBase-Anwendungen auch in REST, Avro oder Thrift API geschrieben sein können
  • Beispiel: Mit HBase wird eine Datenbank mit Millionen von Kundenmailadressen verwaltet. Man soll herausfinden, in wie vielen Mails das Wort „Beschwerde“ auftaucht. Mittels HBase ist es möglich, diese Anfrage innerhalb von Sekunden oder sogar in Echtzeit durchzuführen.

Apache Zookeeper

  • Zookeeper koordiniert jeden Hadoop-Job, der mehrere Hadoop-Komponenten gleichzeitig oder nacheinander anspricht
  • Zookeeper koordiniert jedoch auch die Services einzeln in einem verteilten Cluster
  • Vor Zookeeper war die Arbeit von mehreren Services gleichzeitig mühselig und zeitfressend, nun übernimmt dieser Services die Synchronisation, die Konfiguration, das Zusammenfassen und Benennen von Services und Adressen innerhalb von Hadoop.

Apache OOZIE

  • Oozie kann man als Wecker und Uhr innerhalb von Hadoop ansehen, da für Apache Jobs Oozie als Scheduler agiert.
  • Oozie besteht dabei aus „Oozie workflow jobs“, welche die Reihenfolge von Jobs festlegt, und „Oozie coordinator jobs“, welcher beim Vorliegen neuer Daten automatisch alle notwendigen Prozesse anstößt, damit diese Daten auch im Cluster zur Verfügung stehen.

Apache Ambari

  • Mit diesem Service hast du bereits gearbeitet, er kümmert sich um das Provisionieren des Clusters mit Schritt-für-Schritt-Anleitungen zum Hinzufügen oder Deinstallieren von Services, dem Clustermanagement zum Starten und Stoppen von Services und dem Monitoring aller Hadoop-Services.

Zu guter letzt….

  • Hadoop ist ein großes Gemeinschaftsprojekt aus tausenden von freiwilligen Entwicklern. Vor allem wurde Hadoop jedoch durch durch große Unternehmen wie Google, Facebook, Yahoo etc. unterstützt und voran gebracht.
  • Innerhalb von Hadoop bringt dir detailliertes Wissen über zwei oder drei Komponenten wenig. Du musst den Zusammenhang zwischen den Komponenten verstehen und wie das Cluster im Zusammenhang funktioniert.
  • Anhand deiner Anforderungen und dem Einsatzzweck solltest du dir genau überlegen, welches Hadoop-Services du einsetzen und benutzen möchtest. In den seltensten Fällen brauchst du alle Services in deinem Cluster.

Weiter geht es mit: 2.1 Was ist HDFS und wie funktioniert es?