Hadoop & HDInsight

Das Jahr 2012 ist nun zu Ende und hat (mindestens) ein riesen Hype-Thema hinterlassen, dem ich mich bisher noch nicht widmen konnte: Hadoop, oder wie Microsoft es auf der Windows/Azure Plattform nennt: HDInsight.

Ehrlich gesagt, große Datenmengen – im Sinne von Big Data – die mit Hadoop verarbeitet werden sollen, habe ich nicht im Zugriff. Große Datenmengen auf die ich, speziell beim Thema Datenqualität, in Projekten Zugriff habe, sind meistens so 4-5 Mio. Datensätze, auch 30 Mio. sind schon mal dabei. Für das Thema Datenqualität und speziell die phonetische Suche sind dies mit Sicherheit auch große Datenmengen, aber Big Data? Eigentlich nicht.

Big Data bewegt sich für mich in dem Bereich wie es auch die Wiki schreibt: Das Volumen dieser Datenmengen geht in die Terabytes, Petabytes, Exabytes und Zettabytes. Darüber hinaus sollen diese Daten natürlich auch verarbeitet werden, es finden also umfangreiche große Rechenprozesse statt. Aber wie ich auch schon häufig mitbekommen habe, ist dies immer wieder ein großes Diskussionsthema, dem ich mich hier nicht zuwenden möchte.

Ich möchte im Folgenden erst einmal einfach aus rein technischer Sicht einen Blick auf Hadopp bzw. HDInsight werfen und schauen wie ich das bei mir zum Laufen bekomme.

 

Was ist Hadoop?

elephantHadoop ist eigentlich ein Framework der Apache Software Foundation und kein direkter Server oder Service. Hadoop ist im allgemeinen dafür gedacht, große Datenmengen zu speichern und effizient zu verarbeiten. Hadoop setzt sich dabei primär aus den beiden Komponenten HDFS (Hadoop Distributed File System) sowie dem MapReduce-Algorithmus zusammen.

HDFS ist ein extrem leistungsfähiges Dateisystem, welches großes Datenmengen über mehrere Knoten hinweg speichern kann.

Der MapReduce-Algorithmus ist ein von Google eingeführter Algorithmus für die Berechnung großer Datenmengen (mehrere Petabyte) auf Computerclustern.

Neben den angesprochenen Komponenten existieren mit HBase, Hive, Mahout, Pig, Chukwa und Zookeeper noch eine vielzahl von Erweiterungen. Für mich sind dabei jetzt in erster Linie die Komponenten HBase und Hive interessant. HBase ist eine skalierbare Datenbank innerhalb eines Hadoop-Clusters, Hive erweitert die Hadoop-Plattform um die auf SQL basierende abfragesprache HQL.

Um das ganze nun mal ein bisschen aus dem Blickwinkel eines klassischen ETL Ansatzes zu beschreiben: Als erstes werden Daten in das Hadoop Distributed File System geladen, dies entspricht ungefähr dem Ansatz Extract. Danach werden die Daten mit Hilfe von MapReduce transformiert. So werden z.B. in den Microsoft Tutorials IIS Log Dateien nach speziellen Keywords geparst und aggregiert. Das Ergebnis kann danach in HBase geschrieben (Load) und dann darauf mit Hives abfragesprache HQL zugegriffen werden.

image005

Das Parsing bzw. der gesamte Transformationsprozess der mit MapReduce durchgeführt werden kann, findet innerhalb von Hadoop klassischerweise mit Java statt. Hier muss noch recht viel Entwicklungsaufwand, also echtes Coding betrieben werden. Als alternative zu Java existiert noch die Scripting Language Pig bzw. Pig Latin. Den von Pig Latin unterstützten Statements zufolge, findet hier der eigentlich ETL Prozess statt, da Pig generell die Prozesse Laden, Transformieren, Speichern verfolgt.

image006

Ausführliche Beschreibungen dazu finden sich in der englischen Wikipedia unter http://en.wikipedia.org/wiki/Hadoop, die deutsche Wikipedia (http://de.wikipedia.org/wiki/Hadoop) ist da noch ein bisschen unvollständig. Weiterführende ausführliche Informationen sind ansonsten natrülich auf der Hadoop Seite der Apache Software Foundation zu finden. Auch heise.de hat mit Verarbeiten großer verteilter Datenmengen mit Hadoop einen echt umfangreichen Artikel über Hadoop und seine Komponenten veröffentlicht.

 

HDInsight

Hadoop wird eigentlich in Java entwickelt, der MapReduce Algorithmus existiert neben Java auch in verschiedenen anderen Programmiersprachen wie C++, Erlang oder Python. Mit HDInsight bringt Microsoft die Hadoop Plattform nun auf die Windows Plattform. Dabei gibt Microsoft explizit an, das dies eine 100% Apache Hadoop compatible Big Data implementation ist. Wie man an vielen Stellen aber immer wieder feststellen wird, so ganz losgeworden ist Microsoft an dieser Stelle Java nicht wirklich. Neben der Verwendung des Archivformates JAR, tauchen an einigen Stellen auch noch .jsp files auf. Aber ok, einerseits ist dies eine Preview, anderseits soll ja auch eine 100% Kompatibilität gewährleistet werden.

HDInsight ist seit dem 14.12.2012 als Microsoft HDInsight for Windows Server Developer Preview verfügbar. Der Download und die Installtion findet über den Microsoft Web Platform Installer statt: http://www.microsoft.com/web/gallery/install.aspx?appid=HDINSIGHT-PREVIEW

Neben HDInsight als Hadoop Implementierung, bietet Microsoft auch noch das Microsoft .NET SDK For Hadoop auf Codeplex an, bei dem es sich um die drei Komponenten Map/Reduce, LINQ to Hive und einem WebHDFS Client handelt. Hiermit kann man also die oben beschrieben Transformationen bzw. MapReduce Jobs nicht nur in Java oder Pig Latin, sondern auch in der .NET Sprache seiner Wahl entwickeln.

Ergänzend zu den Links unter dem Punkt Hadoop, hier noch der Verweis auf Getting Started with Microsoft HDInsight, wo sich einige Tutorials und Trainings finden.

 

Hadoop/HDInsight on Windows

Buck Woody gibt in seinem Blog 2 Möglichkeiten an Hadoop/HDInsight auf der Microsoft Plattform zu nutzen.

Als erste Möglichkeit kann Hadoop als Windows Azure HDInsight Service genutzt werden. Ausführliche Informationen dazu sind im TechNet Artikel Introduction to HDInsight Services for Windows Azure zu finden. Die Windows Azure HDInsight Preview ist derzeit über das Portal HadoopOnAzure zu erreichen. Für die Nutzung ist jedoch eine Einladung erforderlich, über die ich derzeit nicht verfüge.

Eine weitere Möglichkeit, und dieser werde ich mich auch widmen, ist die Installation von HDInsight for Windows Server über den oben bereits angesprochenen Download.

Eine dritte von Buck Woody angesprochene aber explizit als nicht supported hervorgehobene Lösung, ist die Installation von Hadoop auf einer Windows Azure Virtual Machine. Was für mich jetzt auch keinen wirklichen Mehrwert oder wesentlichen Unterschied zu einer Hyper-V VM beim Testen darstellt.

Wer nicht unbedingt ein Windows System benötigt um Hadoop zu testen, dem bietet sich natürlich auch noch die Möglichkeit, dies auf einem Linux System zu installieren. Neben den Installern die über die Apache Software Foundation angeboten werden, bietet die Firma Hortonworks auch die Hortonworks Data Platform an. Hortonworks ist der maßgebende Entwicklungspartner von Microsoft bei HDInsight.

Interessant hierbei ist, das Hortonworks mit seiner Data Platform auch die Data Integration Services ausliefert, hinter denen sich nicht anderes als das auf der freien Entwicklungsumgebung Eclipse basierende OpenSource ETL Tool Talend Open Studio for Big Data verbirgt. Nachdem ich bereits oben schon den Vergelich zu einem ETL Tool gemacht habe, frage ich mich spätestens hier, wie die Strategie seitens Microsoft mit SSIS und Hadoop in Zukunft aussehen wird.

Als kleine zusätzliche Anmerkung, für einen ersten Blick auf Hadoop wird von Oracle auch eine OpenSolaris Hadoop LiveCD angeboten. Diese kann ohne viel Aufwand auf jedem herkömmlichen PC/Notebook/VM getestet werden.

 

Installieren von HDInsight

Wie oben beschrieben, wird HDInsight for Windows Server Developer Preview über den Microsoft Web Plattform Installer installiert, was die ganze Installation extrem einfach hält. Der Download mit dem Web Platform Installer kann entweder diret über die Seite Microsoft HDInsight for Windows Server Developer Preview angestoßen werden, oder man sucht einfach innerhalb des Web Platform Installers nach Hadoop bzw, HDInisght.

hadoop_001_thumb[2]

 

Die für die Installtion fehlenden Windows Komponenten/Features werden vom Web Platform Installer automatisch mit installiert bzw. aktiviert wie es neuerdings heißt.

hadoop_002hadoop_003hadoop_004

Bei der Installtion werden 4 Verknüpfungen auf dem Desktop angelegt, mit denen sich über eine schlichte im Windows 8 UI Design gehaltene Oberfläche die erfolgreiche Installtion und Ausführung von HDInsight relativ einfach überprüfen lässt.

 

Einige der oben gezeigten Screenshot wiederholen sich auf den ersten Blick. Da ich mich aber über die kleinen sich verändernden Sprüche auf der Startseite erfreut habe – die mit Sicherheit durch Hortonworks aus der in diesem Bereich humorvolleren Linux-Welt rübergeschwappt sind – wollte ich das nicht vorenthalten 😉

 

Erste Schritte mit HDInsight

Über das Microsoft HDInsight Dashboard gelangt man über Getting Started wie auch auf der Seite HadoopOnAzure.com zu den Tutorials und Trainings Getting Started with Microsoft HDInsight. Hier stehen ausführliche Beschreibungen sowie PowerShell Scripte zur Verfügung, mit denen größere Datenmengen generiert und nach Hadoop geladen werden können.

2013-01-02 14_23_24-169.254.80

 

Desweiteren existiert im Dashboard auch noch ein Download Bereich, über den aktuelle HIVE ODBC Treiber für x86 sowie x64 zum Download bereit stehen. Der ODBC Treiber enthält zusätzlich auch noch ein HIVE Excel-Plugin, mit dem HQL Abfragen gegen Hadoop ausgeführt werden können.

 

Hadoop_Excel

 

Hadoop/HDInsight und SSIS

Wie bereits angesprochen, derzeit gibt es keine wirkliche Verbindung der beiden Welten. Microsoft hat jedoch im Dezember ein TechNet Whitepaper Leveraging a Hadoop cluster from SQL Server Integration Services veröffentlicht.

Auf fast 70 Seiten wird ausführlich beschrieben, wie mit Hilfe von SSIS Hadoop Executions ausgeführt werden können und Daten zwischen Hadoop und anderen System transferiert werden können.

Beispiel-Pakete werden von Microsoft in der MSDN unter SSIS Packages Sample for Hadoop and Windows Azure zum Download angeboten. Ebenso stehen die in dem Projekt verwendeten Azure Blob Storage Components for SSIS vollständig mit C# Quellcode zur Verfügung. Da die SSIS Pakete die Custom Components verwenden, also Komponenten die nicht zum Standard Umfang der SQL Server Integration Services gehören, ist hier vorher ein kleiner Installationsaufwand notwendig.

Mit Hilfe der in HDInsight angebotenen ODBC Treiber für Hive kann auch mittels SSIS auf Hadoop zugegriffen werden. Hierzu sei aber anzumerken, dass der ODBC Treiber nur zum Lesen von Daten verwendet werden kann und innerhalb der Integration Services derzeit – im Gegensatz zu dem Excel Plugin – das Auslesen der vorhandenen Tabellen innerhalb von Hadoop nicht unterstützt wird. Für die Konfiguration eines entsprechenden ODBC Eintrages ist im Übrigen der Port 10000 zu verwenden.