BigData - eine Übersicht


(Dieser Artikel ist auch als Slideshow verfügbar: http://www.slideshare.net/mapredit/big-data-mit-apache-hadoop)

Mehr und mehr drängt sich BigData als nebulöser Begriff in die Fachpresse. Klar ist, wer mithalten will im Business und innovativ zukünftige Projekte erfolgreich zum Abschluss führen will, kommt um das Thema nicht herum. Doch warum kommt man nicht darum herum? Was ist der Beweggrund für das Sammeln riesiger Datenmengen?

Der Weg dahin ist recht einfach und wird von vielen Unternehmen bereits seit Jahren betrieben, nur mit ungleich höherem Aufwand an Manpower und finanziellen Investments.

Ein Beispiel:
Es werden Logfiles durch riesige Datenfarmen zusammengeführt; wochenlange Jobs laufen über Terrabyte an den gewonnen und aufbereiteten Daten. Tritt in der Kette ein Fehler auf, beginnt der Lauf im Idealfall an der unterbrochenen Stelle - oder von vorn. Doch bis dahin muss eine lange Prozesskette eingehalten werden, um brauchbare Daten für eben diesen einen Job zu erhalten. Und exakt hier setzt Apache Hadoop an. Genau genommen reden wir bei BigData über Apache Hadoop.

Was ist BigData?
Spätestens, wenn strukturierte Daten in eine Datenbank geladen werden, fragt man sich, was mit dem Rest der Daten passieren soll? Dem Teil, der beim generieren der zu verarbeitenden Daten entsteht, kurz wohin mit dem anfallenden Datenmüll, oder besser - anfallenden unstrukturierten Datensätzen? Daten, um die es bei dem Buzzword BigData eigentlich geht.

Pro akkumuliertem Datensatz fallen Rohdaten an, statistisch im Verhältnis 1:9 (1 Byte strukturierte Daten zu 9 Byte unstrukturierte Daten). Da diese Mengen an Daten nicht nur unterschiedlichen Typs, sondern auch unformatiert und in ihrer Entstehung ebenso unqualifiziert sind, spricht man von BigData. Und genau diese Daten bringen den Vorteil für ein Unternehmen, den es benötigt, um in einem globalisierten Marktumfeld zu bestehen.

Apache Hadoop - das Framework für Daten

Apache Hadoop blickt auf eine etwa 10jährige Geschichte zurück. Ursächlich liegt die Wiege in der Suchengine Nutch, die 2003 die erste 100-Million-Page Demo online stellte. Der Initiator des Projektes, Doug Cutting, nahm sich des in 2005 von Google veröffentlichten Whitepapers “Google File System and Map Reduce” an und stellte Ende 2006 die erste lauffähige Hadoop-Version vor, die sehr schnell zum Apache Top Level-Projekt wurde und auf eine rege Entwicklergemeinde zurückgreifen kann. Einen Hauptteil der Entwicklung wurde und wird von Yahoo! - später Hourtonworks - und Cloudera beigesteuert. Apache Hadoop beruht auf der Apache-Lizenz und wird als OpenSource Software angeboten. Apache Hadoop ist eine Java-basierte Anwendung, die es dem Benutzer erlaubt, einfache Hardware zu Clustern zusammenzuschließen und die daraus resultierende Rechenleistung linear zu nutzen. Das bedeutet, pro angeschlossener Node stehen dem Cluster die gesamte freigegebene Rechenleistung und Platz der Node ohne Verluste zur Verfügung. Nimmt man einen Server mit 16GB RAM, 4 IDE 1TB Platten und Quad Core CPU, ergibt dies bei 10 Servern bereits eine stattliche Menge an Rechenleistung zu einem sehr moderaten Preis. Da Apache Hadoop auf Linux-Servern läuft, sind auch hier die Kosten durch eine standardisierte Verwaltung (Puppet als Beispiel) überschaubar.

Das Apache Hadoop Ecosystem

Die Hauptfunktionalität liegt in der MapReduce-Anwendung eines Clusters. Um diese Power bestmöglich auszunutzen, ist eine Kenntnis der Java-API und des Wesens von verteilten System fast unumgänglich. Aber nur fast.

Mittlerweile hat sich das Ecosystem rund um Apache Hadoop sehr gut etabliert, und fast monatlich werden neue Tools und Programme veröffentlicht. Die wichtigsten Anwendungen stellen wir in einer kurzen Übersicht vor:

HDFS

Das Hadoop Distributed File System (HDFS) stellt die Grundlage des gesamten Ecosystems dar. Vereinfacht dargestellt werden Daten in Blöcke unterteilt und auf Nodes mit einer frei konfigurierbaren Redundanz gespeichert. Im Normfall wird ein Replicaset mit 3 Kopien benutzt; demzufolge wird mit einfachen Mitteln eine sehr hohe, ITL-konforme Ausfallsicherheit erreicht (es können 66 % des Clusters ausfallen ohne Datenverlust zu erleiden). HDFS achtet hierbei auf entsprechende Latenz und Balancierung des Clusters.
Link: http://wiki.apache.org/hadoop/HDFS

MapReduce

Der MapReduce-Algorithmus erlaubt das Verteilen von Aufgaben in einem verteilten Umfeld. Hierzu wird eine Aufgabe in n Teilaufgaben zerlegt und an die einzelnen Nodes zur Abarbeitung gesandt. Nach Erledigung der Teilaufgaben wird der Datensatz zusammengeführt und ausgegeben. Auch hier ist eine extrem hohe Ausfallsicherheit vorhanden, da jede Node über einen Tasktracker verfügt, der seinen Status ständig mit der Namenode (dem zentralen Punkt eines Clusters) abgleicht.
Link: http://wiki.apache.org/hadoop/MapReduce

Hive

Hive ist eine SQL Abstraction Language mit einer eigenen, an SQL angelehnten DDL (Data Definition Language), basierend auf Primary Key Lookups. Hive ist für das Auswerten von Daten gedacht, dabei können die Daten in unterschiedlichen Formaten vorliegen (plain Text, compressed, binär). Hive ist entfernt mit einer Datenbank vergleichbar; es wird eine Meta-Information einer Tabelle und ihrer Spalten benötigt, der einzelne Felder der auszuwertenden Daten zugrunde liegen. Diese Felder müssen bestimmten Datentypen zugeordnet werden. Interessant ist Hive vor allem für Business Analysts, Statistiker und SQL Professionals, da eine sehr geringe Einarbeitungszeit benötigt wird. Hive arbeitet batchorientiert und ist je nach SLA-Definition auch für NRT - (near real time) Prozesse einsetzbar.
Link: https://cwiki.apache.org/confluence/display/Hive/Home

HBase

HBase ist ein Key Value Store zur Realtime-Verarbeitung von Daten. Der große Unterschied besteht vor allem in der Möglichkeit der Datenmanipulation, die bei Hive nicht direkt gegeben ist. HBase hat keine SQL-Syntax, sondern besteht auf definierten Schemas mit Regionen, in denen die Veränderungen abgelegt werden. Dabei sind diese Regionen untereinander beliebig verzweigbar. HBase ist vor allem für volatile Daten mit hohen Update-Raten und Realtime-Abfragen mit kürzester Latenz interessant. Es ist eine etwas höhere Einarbeitungszeit notwendig, vor allem, da man sich hier von bekannten, starren Datenbankschemas vollständig lösen muss.
Link: http://hbase.apache.org/book.html

Sqoop

Sqoop ist ein Connector zwischen Hadoop und RDBMS und wird von einer Reihe namhafter Datenbankhersteller unterstützt. Mittels Sqoop lässt sich mit einfachen Mitteln und ohne großen Aufwand Apache Hadoop als Middleware-Applikation in bestehende BI-Lösungen integrieren. Der Charme an Sqoop ist die Möglichkeit, Select Statements bereits in Datenbankabfragen oder bei der Rückspeicherung zu integrieren. Neben den Connectoren zu den bekannten RMDBS sind auch Connectoren zu Datenbanken wie TerraData, Netezza, Microstrategy, Quest und Tableau verfügbar. Letztes Beispiel der Wichtigkeit von Sqoop ist die Veröffentlichung des Microsoft SQL-Server-Treibers, der von Microsoft auf der PASS 2011 angekündigt und als Open Source freigegeben wurde.
Link: http://sqoop.apache.org/

Flume

Mit Flume ist es unkompliziert möglich, Daten aus unterschiedlichsten Quellen (Sources) in HDFS oder Files (Sinks) zu transportieren. Es steht eine Vielzahl von Quellen zur Verfügung, und es werden monatlich neue veröffentlicht. Kurz umschrieben ist Flume ein Logcollector, der in seiner neuesten Version (1.2.0) die Möglichkeit der Korrelation bereits im Transportchannel zulässt. Dabei ist es unerheblich, welche Art von Daten transportiert werden, und was die Quelle und das Ziel sind (sofern unterstützt). Die konsequente Nutzung der API ermöglicht es Entwicklern, eigene Sources und Sinks zu schreiben und einzubinden.
Link: http://flume.apache.org

Avro

Eine der größten Herausforderungen in einem Projekt ist die Serialisierung von Daten in ein binärkompatibles Format. Hier setzt Apache Avro an und bietet eine breite Palette an Schemata für alle erdenklichen Datentypen. Das Besondere hierbei ist die Erweiterung der Datenfiles bei lokaler Speicherung. Hier werden die konvertieren Daten nicht ersetzt, sondern um das Schema erweitert, sodass die Daten innerhalb einer Prozesskette oder später von anderen, nicht binärkompatiblen Programmen weiter verarbeitet werden können. Als eine Erweiterung hat RPC Einzug gehalten; damit ist es ohne große Umwege möglich, Daten zwischen den einzelnen Projekten während der RPC-Verbindung zu konvertieren. Ein mögliches Beispiel für die Anwendung sind Telekommunikationsanbieter, die verschiedenste Systeme zentralisieren müssen.
Link: http://avro.apache.org/docs/current/

Mahout

SML (scalable machine learning) darf in einem Ensemble der Massendatenverarbeitung nicht fehlen, dieses bietet Mahout mit seinen nahezu unbegrenzten Einsatzmöglichkeiten von Produktempfehlungen aufgrund von Interessengebieten und statistischen Algorithmen bis hin zu Fraud Detection, Wahrscheinlichkeitsanalysen oder Trendanalysen in Sozialen Netzwerken. Mahout bietet einen zentralen Algorithmus zum Clustern von Informationen weit über HDFS hinaus an. Durch die durchdachte und streng optimierte MR-Integration werden auch umfangreiche Datensätze innerhalb kürzester Zeit aufbereitet und so für den Endanwender nutzbar gemacht.
Link: https://cwiki.apache.org/MAHOUT/mahout-wiki.html

Oozie

Wie in jedem Prozess werden mehr als 90 % aller Aufgaben immer wieder zur gleichen Zeit mit denselben Aufgaben ablaufen. In einem so komplexen System wie Apache Hadoop würde hier sehr viel Zeit - und damit Innovation und letztendlich Geld - bei der Verwaltung der Aufgaben verloren gehen. Dies zu vermeiden ist Aufgabe des Workflow Orchestrators Oozie. Oozie managed Apache Hadoop Workflows und steuert in einem begrenzten Maß die Fehlerbehandlung wie Restart, Reload und Stop eines Prozesses. Oozie kann neben zeitgesteuerten Aktionen auch datengesteuerte Aktionen ausführen, etwa wenn Daten unregelmäßig verfügbar und nicht per zeitgesteuertem Batchprocessing verarbeitet werden können.
Link: http://incubator.apache.org/oozie/