Montag, 15. November 2010

Tag 1: 09:30 - 12:30: Hadoop Fundamentals

Meine erste Session widme ich dem Blick über den Tellerrand. Die Session beleuchtet Systeme für den Umgang mit sehr großen Datenmengen. "Sehr groß" bedeutet: Terabyte.

Hadoop ist ein solches System. Es basiert auf dem Hadoop Distributed File System und einer Algorithmik namens MapReduce. Beides sind gesonderte Subprojekte dieses Apache-Projektes.

Große Datenmengen wollen schnell verarbeitet werden können. Hierzu implementiert Hadoop das zentrale Konzept der Lastverteilung auf unterschiedliche Rechner-Knoten in einem Rechnernetzwerk. Ergänzt wird dieses Konzept durch
  • Zerlegung von großen Daten in Blöcke definierter Größe (z. B. 64 oder 128 MB)
  • Verteilung dieser Daten auf die Knoten
  • Verteilung der Datenverarbeitung auf unterschiedliche Knoten
  • Vermeidung von Netzwerkzugriffen, wo immer möglich
Im Wesentlichen geht es dabei immer um Ausfallsicherheit und Lastverteilung.

MapReduce ist eine besondere Art, gesuchte Information zu finden und weiter zu verarbeiten. Hierfür kommen
  • Driver
  • Mapper und
  • Reducer
zum Einsatz.

Ein Driver ist das Hauptprogramm, welches den gesamten Suchprozess steuert und den zentralen Zugriff auf die Datenbasis ermöglicht. Ein Mapper verarbeitet Daten als Key-Value-Paare. Dabei bildet ein enzelnes Key-Value-Paar die Eingabe und eine Liste von Key-Value-Paaren das Ergebnis. Dieses geht schließlich an den Reducer (es können auch mehrere sein), welcher die Daten aufbereitet (z. B. aggregiert oder modifiziert) und als Ergebnis bereitstellt (z. B. als Endergebnis oder für weitere Mapper).

Man kann sich den Unterschied zwischen Mapper und Reducer vielleicht stark vereinfacht so vorstellen:
  • Mapper sind so etwas wie Filter
  • Reducer sind Transformatoren
Beide laufen in unterschiedlichen "Prozessräumen" (Knoten) von Hadoop und erfüllen dort ihre spezifischen Aufgaben.

Für die Programmierung von Hadoop (API) stehen zwei Programmiersprachen zur Verfügung:
  • Java
  • Hadoop Streaming
Driver, Mapper und Reducer werden in einer dieser Sprachen geschrieben. Die API verbirgt dabei komplett die Hadoop-eigene Cluster- und Knotenverwaltung.

Trotzdem kann es schwierig sein, seine gesamte Abfragelogik über MapReduce-Skripte abzubilden. Alternativ stehen einem Datenbank-ähnliche Projekte zur Verfügung, welche das Abstraktions-Level auf die Verwendung von SQL- oder SQL-ähnliche Sprachen hebt. Zwei solcher Projekte sind Hive und Pig.

Hive kennt als Abstraktionslevel Tabellen, Zeilen und Spalten und speichert diese Informationen in einem Metastore. Hiver erlaubt einen auf SQL basierenden Datenzugriff (plus einer Reihe von Zusatzfunktionen) und ist somit aus Java heraus via JDBC ansprechbar. Der Unterbau von Hadoop bleibt verborgen, wenn man denn will.

Pig kennt keinen Metastore. Die Strukturinformationen werden zur Ausführungszeit der Skripte bekannt gegeben. Die Skriptsprache heisst Pig latin, deren Skripte über einen sogenannten Pig Server (Java-API) angesprochen werden können. Die Sprache erlaubt diverse Zugriffs- und Aggregtionsmöglichkeiten und kapselt Hadoop vollständig.

Durch die FinCon-Brille betrachtet ist das Hadoop Ökosystem eine sehr interessante Alternative zu "herkömmlichen" Datenhaltungssystemen, wenn
  • man mit wirklich großen Datenmengen hantieren muss,
  • man mit einer hohen Anzahl parallel zu verarbeitender User-Anfragen umgehen können muss und schnelle Antwortzeiten garantieren möchte,
  • es sich ausschließlich um lesenden Zugriff handelt.
Die Teilkomponenten Einstiegssuche oder Selektion scheinen für Hadoop sinnvolle Einsatzgebiete zu sein. Zumal eine Google-ähnliche Schnellsuche über die gesamte Fachlichkeit (!) aufgrund der "fehlenden Struktur" im Unterbau scheinbar leichter zu realisieren ist, als mit einer "gewöhnlichen" Datenbank. (regelmäßige Imports aus eigentlicher DB zwecks Datenaktualität vorausgesetzt)

Eine Evaluierung wäre natürlich Voraussetzung. Hierbei müsste u. a. geprüft werden, inwieweit ein System wie Hive sich daten- und prozesstechnisch in eine eigene Anwendungsladschaft integrieren ließe. Hinzu kommt die Beantwortung der Frage nach der Bereitschaft unserer Kunden eine geeignete Infrastruktur bereit zu stellen.

1 Kommentar:

  1. Sitzen ein Reducer, ein Mapper und ein Driver auf ner Parkbank. Sagt der eine zum anderen.... :-)

    Sehr schön, man hat das Gefühl dabei gewesen zu sein! Mehr davon!

    ps: ich nehm das Devoxx Shirt in XS, Danke *muhaha*

    AntwortenLöschen