Blog

Übersicht über das Apache Hadoop Ökosystem

Die Apache Hadoop Technologie erfreut sich einigen Jahren sowohl als On-premise Installation als auch als Cloud Lösung großer Beliebtheit bei Unternehmen. Google, Facebook, AOL, Baidu, IBM, Yahoo und viele Unternehmen setzen auf die bewährten Werkzeuge des Hadoop Ökosystems im die eigenen Daten zu extrahieren, aufzubereiten und auszuwerten. Diese Zusammenstellung von einzelnen Komponenten zur Hortonworks Apache Hadoop Distribution funktioniert analog zu der Zusammenstellung vieler vieler open-source Einzelwerkzeuge zu einer GNU/Linux Distribution.

Apache Hadoop selbst ist eine Sammlung (Framework) von open-source Softwarekomponenten, welche zusammen die Entwicklungen von Softwarellösungen ermöglichen die Probleme mit großen Datenmengen und viel Rechenleistung lösen können. Verteilte Datenhaltung und verteiltes Rechnen wird meist auf Rechnerverbünden (Clustern) aus Standardhardware (PC, Server) durchgeführt. Alle Hadoop Module sind so entwickelt worden, dass Hardwareversagen jederzeit berücksichtigt wird und von den Modulen selbst abgefangen werden kann – ein Job, der auf einem Rechner ausgeführt wurde bei dem ein Defekt eingetreten ist, wird automatisch auf einem anderen, verfügbaren Knoten nochmals gestartet, so dass für den Endnutzer kein Ausfall sondern allenfalls eine kurze Verzögerung bemerbar ist.

Mit diesem Blogartikel möchten wir zunächst einen Überblick über die Hadoop Kerntechnologien und das darauf aufbauende Ökosystem vermitteln. Anschließend gehen wir auf einzelne, wichtige Bausteine mit Schlüsselfunktionen nochmals einzeln ein. Nach dem Lesen des Artikels haben Sie einen umfassenden Überblick über die wichtigsten Apache Hadoop Komponenten.

Hadoop Kernkomponenten

hadoop logo

HDFS (Hadoop Distributed File System)

Das HDFS lässt alle Laufwerke (Festplatten, SSDs) der Maschinen des Clusters wie ein einziges, hochverfügbares Filesystem erscheinen und stellt somit die elementare Datenasis für die Speicherung riesiger Datenmengen dar. Einzelne Laufwerke oder ganze Knoten können ausfallen oder neu hinzugefügt werden ohne das dies die Datensicherheit des Filesystems beeinträchtigen würde. HDFS hält durch interne, für den Nutzer unsichtbare, Datenreplikation alle Datenblöcke mehrfach vor. Zudem werden die Daten innerhalb des Rechnerverbunds möglichst gleichmäßig verteilt, damit bei Berechnungen alle Knoten die Daten bereits lokal vorliegen haben und kein zusätzlicher Netzwerkverkehr anfällt.

YARN (Yet another resource negotiator)

YARN verwaltet die Ressourcen eines Clusters. Durch die Verwendung von Queues für einzelne Jobs können CPU, RAM, GPU und FPGA Ressourcen diesen zugeteilt werden. Zudem startet YARN Datenverarbeitungsprozesse auf jenen Knoten, auf denen auch die dazu notwendigen Daten liegen (Prinzip der Datenlokalität). Fällt ein Knoten aus wird YARN nur den Teil des Jobs, der auf dem ausgefallenen Knoten lag, an einen anderen Knoten zur erneuten Bearbeitung delegieren. Der Nutzer selbst hat wenig direkten Kontakt mit YARN da es die meiste Arbeit in Hintergrund erledigt und Infrastruktursoftware für andere Komponenten darstellt.

MapReduce

MapReduce stellt ein abstraktes Programmiermodell dar um Datenverarbeitungsprozesse zu entwickeln, die auf einem Cluster laufen können. Mapper (z.B. String-Umwandlungen, Markierung von Werten) können Daten auf dem gesamten Cluster parallel transformieren und Reducer (z. B. Summe, Filter) aggregieren diese Ergebnisse anschließend zusammen. Mit der Verschachtelung von Mappern und Reducern sind sehr komplexe Programmabläufe möglich die zudem noch verteilt ausgeführt werden können. Die direkte Programmierung von MapReduce Jobs gilt heute als veraltet, da mittlerweile Leistungsfähigere und schneller erlernbare Schnittstellen (Hive, Spark) für Datenverarbeitungsprozesse existieren. Nur in Außnahmefällen werden MapReduce Jobs noch direkt implementiert.

Hadoop Ökosystem

Auf Basis der Hadoop Kerntechnologien sind in den letzten 10 Jahren viele weitere Komponenten und Abstraktionsschnittstellen entwickelt worden, welche die Entwicklung vereinfachen (z. B. Hive SQL Abfragen statt MapReduce Programmen, …) oder die Verwendung von Hadoop für neue Problemstellungen erst ermöglichen (Event Streaming, Echtzeitverarbeitung, Graphenalgorithmen…). Wir werden nun nach und nach einige Bestandteile des Hadoop Ökosystems und deren Verwendungszweck beschreiben.

hadoop overview lowres

Apache Hive + TEZ

hive logotez logo

Apache Hive bildet eine weitere Abstraktionsebene oberhalb von MapReduce und ermöglicht den Zugriff auf die Dateien im HDFS Dateisystem durch die Verwendung von SQL Abfragen (HiveQL) genau so wie dies bei der Verwendung einer herkömmlichen SQL Datenbank (MySQL, MariaDB, Oracle, MSSQL, etc.) der Fall wäre. Da bereits Millionen von Entwicklern, Data Analysten, Controllern etc. mit der, seit Jahrzehnten exsitierenden, Abfragesprache SQL vertraut sind ist die Lernkurve hier sehr flach und die Hadoop Technologie kann aufgrund der Hive-Technologie wie eine konventionelle Datenbank abfragt werden. Die darunter liegenden Datenmengen, auf denen die Abfragen durchgeführt werden, können jedoch um mehrere Größenordnungen höher liegen, als dies mit konventionellen SQL Datenbanken möglich wäre. Eine SQL Abfrage auf mehreren Terabyte an Daten würde eine SQL Datenbank überfordern für einen Hadoop Cluster ist dies hingegen ein alltägliches Szenario.

Hive kann mehrere Engines nutzen, um die Abfragen durchzuführen. Meist wird Apache TEZ verwendet um Queries mit dem Optimierungsverfahren der gerichteten azyklischen Graphen zu beschleunigen.

Apache Ambari

ambari logo

Apache Ambari ist gewissermaßen das Cockpit des Hadoop Clusters dar. Hier wird die aktuelle Ressourcenauslastung, installierte Cluster-Komponenten und viele weitere Informationen angezeigt. Auch kann das HDFS Dateisystem angesehen oder Übersichten für TEZ und Hive Jobs ausgewählt werden. Ambari kann also zur Clusterkontrolle durch den Admin sowie zur Entwicklung von (Hive) Scripten genutzt werden.

ambariApache Spark

spark logo

Ähnlich wie Apache Hive setzt Apache Spark auf MapReduce auf und bildet eine weitere Abstraktionsschicht für Cluster-Computing.

Basierend auf der Abstraktion des Resilient Distributed Dataset (RDD) bietet Spark eine Dataframe API mit diversen Funktionen zur Datenmanipulation. Spark kann viele Daten direkt im Arbeitsspeicher halten, parallel prozessieren und ist daher sehr schnell in der Datenverarbeitung. Skillbyte konnten in Kundenprojekten die Hiveabfragen durch Spark Programme ersetzen und die Laufzeit um über 80% verbessern. Es lohnt sich also für komplexe Datenoperationen auf großen Datenmengen (Joins, komplexe Algorithmen) Spark zu verwenden.

Spark ist sehr vielseitig und kann SQL Abfragen durchführen (Spark SQL), Machine Learning Algorithmen (MLib) auf dem gesamten Cluster ausführen, Streaming Daten (Spark Streaming) verarbeiten und Graphenverarbeitung (GraphX) durchführen. Die Programmierung der Spark Scripte kann mittels Python (Pyspark), Scala oder Java erfolgen.

Apache HBase

hbase logo

HBase ist eine verteilte opensource NoSQL Datenbank auf Basis des HDFS Dateisystems. Im Gegensatz zu Hive und Spark optimiert HBase schnelle, wahlfreie Datenzugriffe. Sie stellt eine fehlertollerante Technologie dar um große „sparse data“ Datenbestände zu verarbeiten. Also große Datenbestände mit geringerem Informationswert da sich die Werte oft wiederholen und nur geringfügig voneinander abweichen – etwa bei Sensordaten zur Temperaturmessung in einem realtiv konstanten Umfeld. Bei Entwicklungs von HBase Anwendungen gilt es „um zu denken“ da Anwendungen für das Speichermodell einer spaltenorientierten Datenbank entworfen werden müssen.

Apache Airflow

airflow logo

Airflow ist ein Job-Scheduler mit dem u.a. zeitbasiert, d.h. in zuvor spezifizierten Intervallen, mehrere Arbeitsschritte automatisiert durchgeführt werden können. Mehrere Hive Scripte, Spark Jobs und weitere Schritte können so hintereinnader geschaltet werden um Datenstrecken, welche zyklisch aktualisiert werden müssen (Berichte, Uploads zu Drittsystemen etc.) zu berechnen. Airflow überwacht zudem die Ausführung der Einzelschritte, kann diese im Fehlerfall automatisch neu starten bzw. Meldungen via E-Mail versenden wenn Fehler nicht durch wiederholte Ausführung des Jobs gelöst werden können. Eine Vielzahl von Aktoren wie Spark, Hive, HTTP REST Calls, Sqoop und viele weitere stehen bereits in der Standardinstallation zu Verfügung. Zudem ist die Erweiterung mit eigenen Aktoren mittels Python sehr einfach möglich. Kurz: Airflow ist ein sehr flexibles Werkzeug um regelmäßig anfallende Aufgaben auf Hadoop Clustern zu automatisieren und zu monitoren.

airflow screenshot

Apache Zookeeper

zookeeper logo

Zookeeper dient der verteilten Konfiguration von verteilten Systemen und ist ein Infrastruktur-Grundbaustein für viele Hadoop Services. Unter anderem koordiniert Zookeeper die einzelnen Hadoop Services (welche Knoten sind verfügbar, welcher Server ist der aktive Name Node innerhalb des Hadoop Clusters, etc.) und hält die Statusinformationen im gesamten Clusterverbund. Zookeeper selbst ist ein verteiltes System und ist ausfallsicher gestaltet. Als Infrastrukturbaustein kommen Hadoop Nutzer selten direkt mit Zookeeper in Kontakt.

Systeme zur Datenanlieferung

Um Daten aus Drittsystemen in die Hadoop Welt zu integrieren gibt es viele weitere Apache Projekte. Nachfolgend möchten wir einige Systeme zum Hadoop-Datenimport kurz beschreiben (gelbe Komponenten rechts unten im Schaubild).

hadoop overview lowres

Apache Sqoop

sqoop logo

Sqoop bildet eine Brücke zwischen JDBC Datenquellen (relationale Datenbanken nahezug aller Hersteller von SQL Datenbanken bieten diese Schnittstelle an) und dem Hadoop Cluster. Sqoop wird eingesetzt um Daten aus bestehenden Datenbanken mittels SQL Befehlen zu extrahieren und auf dem HDFS des Hadoop Clusters abzulegen, damit diese dort weiterverarbeitet werden können. Wiederkehrende Importe können mit Airflow automatisiert werden.

Beispielsweise können Start- und Stopzeitpunkte von Werbekampagnen mehrere Jahre aus einer externen Datenbank in den Hadoop Cluster importiert werden um dann den bereits im Hadoop vorliegenden Rohdaten der Webserver-Requests jeweils die konkrete Kampagne zuzuordnen. Selbst riesige Datenmengen können dann in der Hadoop-Welt verarbeitet werden – nur limitiert durch die Anzahl und die Ausstattung der Knoten (CPUs, RAM, Speicherplatz,…).

Apache Kafka

kafka logo

Apache Kafka ist ein verteiltes opensource System zur Echtzeitverarbeitung von Datenströmen.Ursprünglich von Linkedin entwickelt wurde es der Apache Software Foundation übergeben. Kafka ist ein verteilter, skalierbarer Message Broker der seine Stärken ausspielen kann, wenn sehr viele Nachrichten zwischen vielen verschiedenen Quellen (Producern) und Senken (Consumern) zuverlässig verteilt werden müssen. Webserver-Logs, Events von Sensoren, Nutzeraktionen auf Webseiten – Kafka kann Daten von verschiedenen Systemen mittels Kafka Connect abholen und bietet bei deren Verarbeitung konfigurierbare Garantieren (at most once, at least once, exactly-once) welche die Nachrichtenzustellung betreffen und ist so für viele Anwendungsfälle geeignet.

 

Wir hoffen wir konnten Ihnen einen umfassenden Eindruck des Hadoop Grundaufbaus und des umgebenden Ökosystems vermitteln. Wir sind gespannt darauf, welche Erfahrungen Sie gemacht haben und welche Werkzeuge Sie verwenden. Senden Sie uns ihre Erfolgsrezepte, Fragen oder weitere Anregungen gerne per E-Mail an info@skillbyte.de

Wir freuen uns auf Ihre Anregungen!

Maurice KnoppÜbersicht über das Apache Hadoop Ökosystem

Related Posts