BigData auf Hadoop mit R analysieren

Mit den R-Paketen von Revolution Analytics lassen sich MapReduce-Algorithmen für verteilte Daten in einem Hadoop Cluster entwickeln und anwenden

Seit die Meta Group 2001 das erste Mal von BigData sprach, werden immer wieder drei Aspekte genannt, die „BigData“ ausmachen: Die Menge der Daten (“Volume”), die Geschwindigkeit, mit der sich die Daten ansammeln (“Velocity”) und schließlich die Vielfalt der Formate der Daten (“Variety”). Vor allem die Vielfalt in Verbindung mit der gleichzeitigen Zunahmen der Daten hat zur Entwicklung von verteilten Filesystemen wie Hadoop geführt. Hadoop kommt ohne die bekannte Spaltenorientierung von relationalen Datenbanksystemen aus. Die Vorteile des Konzeptes sind, dass es keinen Unterschied zwischen strukturierten und unstrukturierten Daten gibt und dass der Aufwand für Strukturänderungen unabhängig vom Datenvolumen konstant ist. Kundenprofile, Social-Media-Daten, Produktinformationen oder Klickdaten sind Beispiele für Daten, die zunehmend in verteilten Clustern verwaltet werden.

Verteilte Daten mit MapReduce erschließen

Im Vergleich zu den relationalen Datenbanken erfordern Hadoop-Cluster andere Verfahren zur Analyse der Daten. MapReduce ist ein Konzept der Programmierung auf verteilten Systemen wie Hadoop. Nach den Funktionen map und reduce in Lisp benannt, besteht das Prinzip von MapReduce darin, ein Problem in kleine Aufgaben einzuteilen, die dann auf einem kleinen Teil der Daten gelöst werden können. Das Ergebnis eines Map-Schrittes ist ein vergleichsweise einfaches Key-Value Paar mit Zwischenergebnissen, die dann in dem Reduce-Schritt zusammengefasst werden. Neben der parallelen Ausführung der Arbeitsschritte und der damit verbundenen Preformance-Verbesserung, ist ein weiterer großer Vorteil dieses Konzeptes, dass nicht alle notwendigen Daten zur Berechnung in einen Hauptspeicher geladen werden müssen.

Einsatz-Szenarien

Ein typisches Einsatzszenario für Daten, die in einem Hadoop-System gespeichert sind, ist das Auszählen von Wörtern in Textdateien. Während bei herkömmlichen Techniken die gesamte Textmenge en bloc zeitaufwendig durchgearbeitet wird, zerlegt man mit MapReduce die Texte auf den einzelnen Knoten in kleine Blöcke. Mit dem Reduce-Teil werden dann die Ergebnisse wieder zusammengefasst. Auf diese Art lassen sich natürlich auch komplexere Such-, Vergleichs- und Analyseoperationen parallelisieren und dadurch schneller berechnen.

RevoConnectR für  Apache Hadoop

Revolution Analytics hat eine Sammlung von Paketen für R entwickelt, mit denen man in R MapReduce Algorithmen entwickeln und auf dem Hadoop Distributed Filesystem (HDFS) anwenden kann. Mit RevoConnectR können Nutzer von Revolution R Enterprise sich direkt mit dem HDFS verbinden, MapReduce-Algorithmen in R entwickeln, die Berechnungen auf den Knoten ausführen lassen und die Ergebnisse weiterverwenden. So lässt sich die gesamte Funktionsvielfalt von R direkt auf den verteilt vorliegenden Daten anwenden ohne diese in den Hauptspeicher zu laden. Die eigentliche Berechnung erfolgt verteilt auf den Knoten. Die Pakete des Open-Source-Projektes und weitere Dokumentationen stehen hier zur Verfügung.

Ähnlichkeit der Konzepte

Neben dem Vorteil, die gesamte Funktionsvielfalt von R auf verteilte Daten anzuwenden, ist die Entwicklung von MapReduce Algorithmen mit R für geübte R-Nutzer vor allem auch deshalb eine interessante Option, da sich die Anwendung der Funktionen lapply und tapply in R in Bezug auf Syntax und Semantik kaum von der „MapReduce-Logik“ unterscheidet. Dabei werden genauso Elemente einer Liste transformiert und ein Index berechnet — ein key in der MapReduce Sprache — und auf eine definierte Gruppe angewendet. Ein einfaches Beispiel soll das Konzept verdeutlichen:


einVektor <- 1:1000
  sapply(einVektor, function(x) x *2)

Dieser R-Code erzeugt eine Zahlenreihe von 1 bis 1000 und speichert diese in einem Vektor. In der zweiten Zeile wendet die Funktion „sapply“ die Multiplikation mit 2 auf jedes der 1000 Vektorelemente an. Die Lösung der gleichen Aufgabe als MapReduce-Job in rmr:


einVektor = to.dfs(1:1000)
  mapreduce(
    input = einVektor, 
    map = function(key, x) cbind(x, x*2))


Die für das gleiche Beispiel notwendige Zahlenreihe wird mit to.dfs in das Filesystem geschrieben. In dem zweiten Teil wird in einer relativ ähnlichen Syntax auf die Zahlenreihe wieder das Multiplizieren angewendet. Lediglich das Argument key kommt hinzu, das für das Zusammenführen der Ergebnisse benötigt wird. Der wesentliche Unterschied ist nun, dass die erste Variante der Berechnung vom R Interpreter im Hauptspeicher ausgeführt wird, während in der zweiten Variante auf einem verteilten File System gerechnet wird.

Fazit

Die Erstellung von MapReduce Jobs mit rmr ähnelt der Philosophie und der Arbeitsweise in R, so das geübte R Entwickler sich schnell in die Erstellung von MapReduce Jobs einarbeiten können. Mit den R-Paketen von Revolution Analytics lassen MapReduce-Algorithmen für verteilte Daten auf einem Hadoop Cluster anwenden und so „BigData“ auf Hadoop mit R analysieren.

 

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>