Die Bestandteile des Big-Data-Frameworks

Was ist was im Hadoop-Kosmos

20.06.2016
Von Thomas Hafen
Das Open-Source-Framework Apache Hadoop ist das bekannteste und am weitesten verbreite System zur Big-Data-Analyse. Um den Kern der Lösung hat sich ein ganzes Universum an Ergänzungen und Erweiterungen gebildet. Wir stellen die wichtigsten vor.

Hadoop ist ein in Java geschriebenes Framework, das für die verteilte Verwaltung und Berechnung von großen Datenmengen in einer Cluster-Umgebung konzipiert ist. Das System ist derzeit der anerkannte Standard für Big-Data-Analysen. Dank offener Schnittstellen lässt es sich wie ein Baukasten leicht um weitere Werkzeuge erweitern, die teils Spezialaufgaben wahrnehmen, teils aber auch einfach nur Alternativen zu den Standard-Hadoop-Tools darstellen. Im Folgenden sollen - ohne Anspruch auf Vollständigkeit - die wichtigsten Werkzeuge für die wesentlichen Funktionsbereiche von Hadoop vorgestellt werden.

Dateisysteme: Hadoop Distributed File System (HDFS) und die Alternativen

Mit dem "Hadoop Distributed File System" (HDFS) enthält das Analyse-Framework bereits ein Dateisystem, das speziell für die verteilte Verwaltung sehr großer Datenmengen ausgelegt ist. Ein HDFS-Cluster besteht im Wesentlichen aus einem oder mehreren Knoten, welche die Metadaten verwalten (NameNodes) und den "DataNodes", auf denen die eigentlichen Dateien als Datenblöcke fester Länge redundant und verteilt liegen. Jeder DataNode entspricht in der Regel einem Server. Um Rechenoperationen durchzuführen, kontaktiert der Client den NameNode für die Metadaten, tauscht aber Daten sonst direkt mit den DataNodes aus. Die größten Vorteile von HDFS sind:

+ integrierte Hochverfügbarkeit: HDFS-Cluster sind von Haus aus redundant und ausfallsicher ausgelegt. Der Nutzer kann sich deshalb auf die eigentliche Aufgabe der Datenanalyse konzentrieren.

+ optimale und performante Verarbeitung großer Datenmengen: HDFS kann ohne Probleme mehrere 100 Millionen Dateien verwalten, ohne dass es zu Performance-Problemen kommt.

+ leichte Übertragbarkeit: Daten in einem HDFS lassen sich problemlos von einer Hadoop-Distribution in eine andere überführen.

+ geringe Kosten: HDFS setzt keine teuren Storage Area Networks (SAN) voraus, sondern verwendet Speicher auf Standard-Festplatten in Standard-Servern.

Die hierarchische Struktur hat allerdings auch Nachteile. Da alle Nutzer über den NameNode Informationen austauschen, kann die Leistung des gesamten Clusters leiden, wenn sehr viele Anwender parallel auf Metadaten zugreifen. Ist nur ein NameNode im Einsatz, wie es in älteren Hadoop-Distributionen der Fall war, bildet dieser außerdem einen Single Point of Failure. Fällt der Knoten aus oder muss er für Wartungsarbeiten heruntergefahren werden, ist das komplette Cluster nicht erreichbar. Deshalb wurde mit Version 2 von Hadoop das High-Availability-Feature (HA) für HDFS eingeführt. Es bietet die Option, einen zweiten Knoten für die Metadatenverwaltung im Active-/Passive-Modus als Hot Standby zu definieren.

Im Hadoop Distributed File System (HDFS) regelt der sogenannte NameNode den Zugriff auf dei Daten.
Im Hadoop Distributed File System (HDFS) regelt der sogenannte NameNode den Zugriff auf dei Daten.
Foto: Apache Foundation

HDFS-Alternative 1: CassandraFS (CFS)

Apache Cassandra ist eine NoSQL-Datenbank (siehe auch Abschnitt "Datenbanken"), die vor allem durch Skalierbarkeit und Schnelligkeit punktet. Das Unternehmen DataStax hat mit "CassandraFS" (CFS) ein Dateisystem konzipiert, das auf Basis von Cassandra Big-Data-Analysen ermöglicht. Im Gegensatz zum "Master-Slave"-Ansatz von HDFS ist CFS eine hierarchiefreies "Peer-to-Peer"-System. Für Ausfallsicherheit und Redundanz nutzt CassandraFS die in Cassandra implementierten Replikationsmechanismen. Vorteile im Vergleich zu HDFS sind:

+ einfacherer Aufbau: Statt Cluster-Knoten mit verschiedenen Aufgaben definieren und aufsetzen zu müssen, benötigt CFS neben der Cassandra-Datenbank keine weiteren Konfigurationsschritte.

+ höhere Verfügbarkeit: Laut Anbieter DataStax ist die Ausfallsicherheit durch die in Cassandra integrierten Replikations- und Redundanzmechanismen noch höher als bei HDFS, ein Datenverlust sei praktisch ausgeschlossen.

+ Unterstützung für mehrere Rechenzentren: Mit CFS lassen sich Datenbank-Cluster über mehreren Rechenzentren hinweg betreiben. Bei Bedarf kann der Administrator über Keyspaces und Job Tracker festlegen, welche Daten an welchem Standort liegen und wo welche Analysen durchgeführt werden sollen.

Der Namensraum von CFS umfasst zwei Spaltenfamilien: "Inode" für die Definition der Metadaten und "sblocks" für Nutzdaten.
Der Namensraum von CFS umfasst zwei Spaltenfamilien: "Inode" für die Definition der Metadaten und "sblocks" für Nutzdaten.
Foto: DataStux

HDFS-Alternative 2: OrangeFS und andere parallele Dateisysteme

OrangeFS ist eine Weiterentwicklung von PVFS (Parallel Virtual File System). Es ist Open Source und gehört ebenfalls zu den mit Hadoop kombinierbaren Dateisystemen (HCFS, Hadoop Compatible File System). Bei einem Test an der Clemson University rechneten Clients, die auf einen Storage-Cluster mit OrangeFS zugriffen, bei klassischen MapReduce-Routinen um 25 Prozent schneller als beim Einsatz eines HDFS-Clusters. Parallele Dateisysteme, zu denen auch Lustre und CephFS gehören, bieten folgende Vorteile:

+ Paralleler Zugriff vom Client auf Metadaten und Nutzdaten.

+ Weniger Bandbreiten- und Latenzprobleme.

HDFS-Alternative 3: SwiftFS und andere Dateisysteme für Objekt-Storage

Immer mehr Hadoop-Instanzen werden nicht in einem lokalen Server-Cluster betrieben, sondern in einer Public oder Private Cloud. Dabei kommen häufig objektbasierte Speichersysteme wie Amazon S3, Microsoft Azure Blob Storage oder Swift in OpenStack-Umgebungen zum Einsatz. SwiftFS und andere ähnliche Dateisysteme erlauben es, Hadoop-Operationen auf Objektspeicher auszuführen. Das hat folgende Vorteile:

+ Recheneinheit und Speichereinheit lassen sich trennen. So kann man beispielsweise die Daten für spätere Analysen in der Cloud belassen, die Maschinen zur Berechnung aber herunterfahren und nur bei Bedarf wieder starten, was Kosten spart.

+ Rechenleistung und Speicherbedarf lassen sich unabhängig voneinander skalieren.

+ Mehrere Rechen-Cluster können auf dieselben Daten zugreifen.

+ Prozesse wie ETL (Extrakt, Transform, Load) können auf die Daten zugreifen, ohne dass Hadoop überhaupt gestartet werden muss.

Amazon Objektspeicher S3 lässt sich für Big-Data-Plattformen wie Spark oder Hadoop nutzen.
Amazon Objektspeicher S3 lässt sich für Big-Data-Plattformen wie Spark oder Hadoop nutzen.
Foto: Amazon

Datenbanken für Hadoop: Cassandra, HBase, MongoDB & Co.

Es gibt eine Reihe von sogenannten NoSQL-Datenhaltungs- und -verwaltungssystemen, die in Hadoop zum Einsatz kommen können. Diese Datenbanken sollen die Beschränkungen der klassischen relationalen SQL-Systeme überwinden, die mit sehr großen Datenmengen im Petabyte-Bereich in aller Regel Schwierigkeiten bekommen, da sie nicht beliebig skalierbar sind. Sehr häufig kommt die spaltenorientierte Datenbank HBase zum Einsatz, eine Open-Source-Implementierung der Google-Entwicklung Bigtable. HBase bietet folgende Vorteile:

+ verteilt, skalierbar und fehlertolerant.

+ setzt auf dem Hadoop-Stack auf.

+ Echtzeitverarbeitung von Big-Data-Analysen.

HBase kann Cluster über verteilte Standorte hinweg synchronisieren.
HBase kann Cluster über verteilte Standorte hinweg synchronisieren.
Foto: Apache Foundation

HBase ist allerdings komplex und spielt vor allem dann seine Vorteile aus, wenn auf einem Subset der Daten Echtzeitanalysen gefahren werden sollen. Eine einfacher zu implementierende Alternative ist Cassandra, die schon im Abschnitt über Dateisysteme erwähnte, von DataStax entwickelte Datenbank. Aus Performance-Gründen verzichtet Cassandra darauf, Daten beim Schreiben sofort auf alle Server eines Clusters zu verteilen. Damit kann es zu unterschiedlichen Ständen kommen. Die Konsistenz wird erst im Nachhinein sichergestellt (Eventual Consistency). Die Vorteile von Cassandra im Überblick:

+ Einfach aufzusetzen und zu warten.

+ hoch verfügbar.

+ sehr gute Skalierbarkeit.

Auch die dokumentenorientierte Datenbank MongoDB lässt sich per Konnektor mit Hadoop verbinden und als Datenquelle oder Ablageort für Abfrageresultate verwenden. Mit einer starken Konsistenzsicherung, einer einfachen Abfragesprache und sekundären Indices kommt MongoDB einer typischen SQL-Datenbank funktional am nächsten, ist aber als NoSQL-DB dennoch hoch skalierbar und verfügbar. Die wichtigsten Vorteile von MongoDB:

+ Index-Unterstützung für hohe Leistung.

+ automatische Partitionierung (Auto Sharding) für hohe Skalierbarkeit.

+ Master-Slave-Modell erleichtert Integration in Applikationen.

Weitere Datenbanken im Hadoop-Kosmos sind Accumulo, eine Weiterentwicklung des Bigtable-Ansatzes, auf dem auch HBase beruht, die cloud-basierte NoSQL-Datenbank Amazon DynamoDB, die In-Memory-Datenbank Redis oder die graphenorientierte Neo4j, um nur einige zu nennen.

SQL-Abfragen auf Hadoop-Cluster: Hive, Impala, Phoenix

Diverse Werkzeuge erleichtern es den Anwendern, SQL-Abfragen auf Hadoop-Clustern zu definieren, auszuführen und zu verwalten. Eines der bekanntesten ist das Data-Warehouse-System Hive. Es erlaubt per HiveQL SQL-Queries auf verteilte Daten, kann Daten strukturieren und Analysen mit Tez, Spark oder MapReduce durchführen. Die wichtigsten Vorteile von Hive sind:

+ über User Defined Functions (UDF) einfach erweiterbar.

+ kann mit fast jedem Datenformat umgehen.

+ Hive-Abfragen lassen sich mit Statistikpaketen wie Apache Mahout für komplexe Analysen erweitern.

Hive besteht aus mehreren Komponenten, darunter eine Benutzeroberfläche, ein Compiler und die Execution Engine, die den vom Compiler erstellten Plan ausführt.
Hive besteht aus mehreren Komponenten, darunter eine Benutzeroberfläche, ein Compiler und die Execution Engine, die den vom Compiler erstellten Plan ausführt.
Foto: Apache Foundation

Eine Alternative zu Hive stellt das von Cloudera entwickelte Impala dar. Impala ist dem Hersteller zufolge schneller als Hive und kann dank massiver paralleler Programmierung (MPP) größere Datenmengen verarbeiten als die Hive Query Engine. Es benötigt allerdings mehr Arbeitsspeicher und hat vor allem dann Nachteile, wenn umfangreiche Operationen, etwa Joins auf den Daten ausgeführt werden sollen. Das ursprünglich von Salesforce.com entwickelte Phoenix bietet eine weitere Möglichkeit, SQL-Abfragen auf Hadoop-Clustern auszuführen. Es bildet eine SQL-Schicht auf einer HBase-Datenbank. Anders als das Batch-orientierte Hive greift Phoenix über native APIs auf die Daten zu, was die Analysen je nach Datenmenge erheblich beschleunigt.

Analyseplattformen: Pig, Scalding, Scoobi

Mit der Skriptingplattform Pig lassen sich komplexe MapReduce-Transformationen auf einem Hadoop-Cluster ausführen. Pig verwendet dafür eine eigene abstrakte Programmiersprache (Pig Latin). Die Plattform übersetzt die Pig-Latin-Scripts in MapReduce-Abfragen, die dann über das Hadoop-eigene Job- und Cluster-Management-Framework YARN auf die Daten angewendet werden. Pig-Programme lassen sich besonders leicht parallelisieren, was Abfragen auf sehr großen Datenbeständen beschleunigt und erleichtert. Die wichtigsten Vorteile von Pig:

+ einfache Programmierung auch komplexer, parallel ausgeführten Analysenaufgaben.

+ automatische Code-Optimierung.

+ mit eigenen Funktionen erweiterbar.

Einige Alternativen zu Pig basieren auf Scala ("Scalable Language"), einer skalierbaren, objektorientierten und funktionalen Programmiersprache, darunter das von Twitter entwickelte Scalding oder Scoobi vom australischen Forschungszentrum NICTA (National ICT Australia).

Hadoop-Verwaltung und Workflow-Management: Ambari, Ooozie & Co.

Mehrere Tools erleichtern das Hadoop-Management. So bietet etwa Ambari eine Weboberfläche zur Installation, Verwaltung und Überwachung von Hadoop-Clustern. Über RESTful APIs lassen sich diverse Drittprogramme mit Hadoop verbinden. Ambari läuft als Server auf einem Knoten des Clusters und installiert von dort aus Agenten auf den Hosts, die es verwalten soll. Die wichtigsten Vorteile von Ambari sind:

+ ermöglicht eine automatische Cluster-Installation.

+ zentrale Verwaltung.

+ leichte Erweiterung des Hadoop-Ökosystems.

Mit Ambari behält man alle wesentlichen Hadoop-Komponenten im Blick.
Mit Ambari behält man alle wesentlichen Hadoop-Komponenten im Blick.
Foto: Hortonworks

Das von Cloudera entwickelte Hue erleichtert das Hadoop-Management ebenfalls über eine Browser-basierte Nutzeroberfläche. Es ermöglicht den Zugang zu den im HDFS gespeicherten Dateien und erlaubt Abfragen, etwa per Hive, Pig oder Impala.

Für das Workflow-Management in Hadoop kommen unter anderem Oozie oder Azkaban in Frage. Beide Tools übersetzen eine Reihe von MapReduce-, Pig-, Java- oder Skript-Aktionen in einen ausführbaren Job. Oozie setzt dafür eine XML-Datei ein und definiert den Workflow in einem Directed Acyclic Graph (DAG), während Azkaban Property Files benutzt, die eine topologische Reihenfolge beschreiben. Die Vorteile von Oozie im Einzelnen:

+ unterstützt Variablen und Funktionen.

+ Workflows können Entscheidungszweige enthalten.

+ Job-Workflow kann zeit- oder eingabegesteuert sein.

Die Vorteile von Azkaban dazu im Vergleich:

+ Ressourcen lassen sich kontrollieren und explizit sperren.

+ Kann Standalone oder als Server ausgeführt werden.

+ Alle Zustände eines laufenden Workflows werden im Speicher vorgehalten.

Weitere Workflow-Manager für Hadoop sind beispielsweise das von Spotify entwickelte Luigi oder die Airbnb-Entwicklung Airflow, die erst vor kurzem den Inkubator-Status bei Apache erhalten hat.

Airflow kann die Abhängigkeiten in einem Workflow graphisch darstellen.
Airflow kann die Abhängigkeiten in einem Workflow graphisch darstellen.
Foto: Airbnb

Datenmanagement und Messaging: Flume, Sqoop, Kafka

Eine Reihe von Werkzeugen erlaubt es, Daten in Hadoop zu sammeln, zu filtern, zu transportieren und sie nach der Analyse wieder zur Verfügung zu stellen. Flume, beispielsweise, ist ein verteilter Service, der große Mengen von Log-Daten verarbeiten kann. Die wichtigsten Vorteile sind:

+ einfache und flexible Architektur.

+ robust und fehlertolerant.

+ einfaches Datenmodell.

Sollen Daten zwischen HDFS und einer relationalen Datenbanken transferiert werden ist Sqoop das Mittel der Wahl. Sqoop kann sowohl externe Daten aus einer strukturierten Datenbank in HDFS oder ein NoSQL-System wie HBase importieren, als auch umgekehrt Informationen exportieren. Vorteile sind unter anderem:

+ paralleler Datentransfer und Fehlertoleranz bei Im- und Export.

+ automatisiert den Datentransfer zwischen Hadoop und Datenbanken oder Mainframes weitgehend.

Informationen wie Log-Files, Transaktionen auf Webseiten oder Geodaten lassen sich mit Kafka in Hadoop sammeln und verteilen. Der in Scala geschriebene Messaging-Dienst abonniert Feeds (subscribe) und stellt sie für interaktive Analysen zur Verfügung (publish). Statt große Menge von Daten durchsuchen zu müssen, kann der Anwender mit Kafka interaktiv auf genau die Informationen zugreifen, die er gerade benötigt. Die größten Vorteile des Systems:

+ hoher Datendurchsatz.

+ unterstützt Online- und Offline-Verarbeitung.

+ reduzierte Netzlast durch Gruppieren von Nachrichten (Message Sets).

Kafka sammelt Daten aus verschiedenen Quellen (Producer) und gibt sie an Abfragen (Consumer) weiter.
Kafka sammelt Daten aus verschiedenen Quellen (Producer) und gibt sie an Abfragen (Consumer) weiter.
Foto: Apache

Sicherheit in Hadoop-Umgebungen: Knox und Sentry

Diverse Module sollen Hadoop-Cluster gegen Bedrohungen absichern und den Schutz sensibler Daten gewährleisten. Mit dem REST-API-Gateway Knox lassen sich beispielsweise alle REST-Zugriffe auf ein Hadoop-Cluster kontrollieren. Knox ermöglicht die Authentifizierung über LDAP oder Active Directory. Die Vorteile von Knox im Einzelnen:

+ Gute Integration in gängige Identity-Managementlösungen.

+ Cluster-Details wie Hosts und Ports werden nach außen nicht mehr sichtbar.

+ vereinfacht den Zugang zu Hadoop-Clustern.

Wer Benutzerrechte rollenbasiert und fein abgestuft vergeben möchte, kann dazu Sentry nutzen. Das Tool arbeitet derzeit mit Hadoop-Komponenten wie Hive, Solr oder Impala zusammen, lässt sich aber auch in andere Module integrieren. Es besteht aus einer Server-Komponente, welche die Zugangsdaten verwaltet, und einer Data Engine für den eigentlichen Zugriff. Diese leitet Anfragen an die dritte Komponente, das Sentry Plugin, weiter, das die Zugriffe auf Basis definierter Richtlinien zulässt oder verwirft. Vorteile von Sentry sind unter anderem:

+ Unterstützt rollenbasierte Zugriffskontrolle.

+ stellt einheitliche Gruppendefinitionen sicher (Group Mapping).

+ einmal erstellte Zugangsrichtlinien gelten für alle Analysewerkzeuge.

Ranger ist ein weiteres Framework, mit dem sich die Sicherheit in Hadoop-Umgebungen verbessern lässt. Es bietet eine Benutzeroberfläche, über die sich alle sicherheitsrelevanten Aufgaben in einer Hadoop-Umgebung managen lassen. Chukwa, schließlich, erlaubt es, Log-Daten im großen Stil zu aggregieren und auszuwerten, um Unregelmäßigkeiten oder Sicherheitsprobleme erkennen zu können.

Weitere Tools für Hadoop

Der Hadoop-Kosmos groß, deshalb kann dieser Artikel nur einen kleinen Ausschnitt aller Werkzeuge beschreiben, die es im Umfeld dieser Big-Data-Lösung gibt. Dieser letzte Abschnitt soll einen kurzen Abriss über Tools geben, die nicht in die vorgestellten Kategorieren passen, :

Arrow macht als Layer für die spaltenbasierte In-Memory-Datenverarbeitung den Datenaustausch effizienter und schneller, Parquet und das Optimized Row Columnar File Format (ORC), das für Hive entwickelt wurde, stellen Daten ebenfalls spaltenorientiert zur Verfügung und umgehen so die Performanceprobleme typischer reihenbasierter Datenbanken. Mahout und die Machine Learning Library (MLib) für Spark stellen Rechenumgebungen für maschinelles Lernen dar. Solr ist eine hoch skalierbare, fehlertolerante Suchmaschine für große Datenmengen und ZooKeeper, soll, wie der Name schon andeutet, den ganzen Hadoop-Zoo im Zaun halten. Der zentrale Service synchronisiert Konfigurationen, Namensräume und Gruppen.

ZooKeeper synchronisiert Metadaten über verschiedene Server und stellt sie Clients zur Verfügung.
ZooKeeper synchronisiert Metadaten über verschiedene Server und stellt sie Clients zur Verfügung.
Foto: Apache

Fazit

Die Hadoop-Welt ist kaum überschaubar und wächst ständig. Für fast jede Aufgabenstellung und fast jedes Problem gibt es verschiedene Werkzeuge. Das jeweils richtige zu finden, kann viel Zeit kosten und frustrierend sein. Eine Alternative zum Eigenbau sind vorgefertigte Hadoop-Distributionen wie Amazon Elastic MapReduce (EMR), Cloudera, die Hortonworks Data Platform (HDP), die Converged Data Platform von MapR oder Microsoft HDInsight. Diese Plattformen nehmen dem Anwender einen Teil der Recherche und der Konfigurationsarbeit ab. Andererseits können sie natürlich auch nur einen Ausschnitt aus dem riesigen Ökosystem bieten, das Hadoop mittlerweile ausmacht. (ba)