Ich arbeite an einem Projekt, das sich mit der Analyse einer sehr großen Datenmenge beschäftigt, also habe ich MapReduce erst kürzlich entdeckt, und bevor ich weiter darüber nachdenke, möchte ich sicherstellen, dass meine Erwartungen stimmen.
Die Interaktion mit den Daten erfolgt über ein Web-Interface, daher ist hier die Reaktionszeit entscheidend, ich denke an ein 10-15 Sekunden Limit. Vorausgesetzt, dass meine Daten in ein verteiltes Dateisystem geladen werden, bevor ich eine Analyse daran mache, was für eine Leistung kann ich davon erwarten?
Nehmen wir an, ich muss eine einfache 5-GB-XML-Datei filtern, die gut strukturiert ist, eine ziemlich flache Datenstruktur und 10.000.000 Datensätze enthält. Und sagen wir, die Ausgabe wird 100.000 Datensätze ergeben. Sind 10 Sekunden möglich?
Wenn es, welche Art von Hardware schaue ich? Wenn nicht, warum nicht?
Ich gebe das Beispiel auf, aber jetzt wünsche ich, dass ich es nicht getan habe. 5GB war nur eine Probe, über die ich sprach, und in Wirklichkeit würde ich mit vielen Daten zu tun haben. 5 GB könnten Daten für eine Stunde des Tages sein, und ich möchte vielleicht alle Datensätze identifizieren, die bestimmte Kriterien erfüllen.
Eine Datenbank ist wirklich keine Option für mich. Was ich herausfinden wollte, ist die schnellste Leistung, die ich von MapReduce erwarten kann. Ist es immer in Minuten oder Stunden? Sind es nie Sekunden?
MapReduce eignet sich gut zum Skalieren der Verarbeitung großer Datasets, aber es ist nicht dafür gedacht, darauf zu reagieren. In der Hadoop-Implementierung beispielsweise dauert der Start-Overhead normalerweise einige Minuten. Die Idee hier ist, einen Bearbeitungsauftrag zu nehmen, der Tage dauern würde und ihn in die Reihenfolge von Stunden oder Stunden bis Minuten etc. bringen würde. Aber Sie würden keinen neuen Job als Antwort auf eine Webanfrage starten und erwarten, dass er endet Zeit zu antworten.
Um zu erfahren, warum dies der Fall ist, überlegen Sie sich, wie MapReduce funktioniert (allgemeine, allgemeine Übersicht):
Ein Bündel von Knoten empfängt Teile von die Eingangsdaten (Split genannt) und tun etwas Verarbeitung (der Kartenschritt)
Die Zwischendaten (Ausgabe von der letzte Schritt) wird neu partitioniert, wie z dass Daten mit ähnlichen Schlüsseln enden zusammen. Dies erfordert normalerweise einige Datenübertragung zwischen Knoten.
Die Knoten reduzieren (die nicht sind notwendigerweise vom Mapper zu unterscheiden Knoten - eine einzelne Maschine kann mehrere Jobs in Folge) durchführen der Reduzierungsschritt.
Ergebnisdaten werden gesammelt und zusammengeführt um den endgültigen Ausgabesatz zu erstellen.
Während Hadoop und andere versuchen, die Datenlokalisierung so hoch wie möglich zu halten, gibt es immer noch eine Menge an Umlagerungen, die während der Verarbeitung auftreten. Dies allein sollte verhindern, dass Sie eine reaktionsfähige Webschnittstelle mit einer verteilten MapReduce-Implementierung unterstützen.
Bearbeiten : Wie Jan Jongboom sagte, eignet sich MapReduce sehr gut für die Vorverarbeitung von Daten, so dass Webabfragen schnell ausgeführt werden können, da sie nicht verarbeitet werden müssen. Betrachten Sie das berühmte Beispiel der Erstellung eines invertierten Index aus einer großen Menge von Webseiten.
MapReduce ist ein allgemeiner Begriff. Wahrscheinlich möchten Sie sich fragen, ob ein voll funktionsfähiges MapReduce-Framework mit Jobsteuerung wie Hadoop für Sie geeignet ist. Die Antwort hängt immer noch vom Framework ab, aber in der Regel sind die Funktionen für Jobsteuerung, Netzwerk, Datenreplikation und Fehlertoleranz eines MapReduce-Frameworks für Aufgaben geeignet, die Minuten, Stunden oder länger dauern. Dies ist wahrscheinlich die richtige Antwort für dich.
Das MapReduce-Paradigma kann für Sie nützlich sein, wenn Ihre Aufgaben unter unabhängigen Mappern aufgeteilt und mit einem oder mehreren Reduzierern kombiniert werden können. Die Sprache, das Framework und die Infrastruktur, die Sie zur Verfügung haben, lassen Sie davon profitieren.
>MapReduce unterscheidet sich nicht unbedingt von einer Datenbank. Eine deklarative Sprache wie SQL ist eine gute Möglichkeit, die Parallelität zu abstrahieren, ebenso wie abfragbare MapReduce-Frameworks wie HBase. Dieser Artikel behandelt MapReduce-Implementierungen von k-means Algorithmus und endet mit einem reinen SQL-Beispiel (das davon ausgeht, dass der Server es parallelisieren kann).
Idealerweise muss ein Entwickler nicht zu viel über die Rohrleitungen wissen. Erlang-Beispiele möchten gerne zeigen, wie die funktionalen Sprachfunktionen mit der Prozesssteuerung umgehen.
Denken Sie auch daran, dass es leichte Möglichkeiten gibt, mit MapReduce zu spielen, zB bashreduce .
Eine verteilte Implementierung von MapReduce wie Hadoop eignet sich nicht gut für die Verarbeitung von 5-GB-XML
Wenn Sie viele 5-GB-Dateien hatten, könnten Sie hadoop verwenden, um die Aufteilung zu verteilen. Sie können sie auch verwenden, um Ergebnisse in Dateien zusammenzuführen und die Ergebnisse in einem Format zu speichern, in dem sie schnell von Ihrem Webinterface abgefragt werden können, wie andere Antworten bereits erwähnt haben.
Ich habe kürzlich an einem System gearbeitet, das ungefähr 120 GB / Stunde mit 30 Tagen Geschichte verarbeitet. Wir haben Netezza aus organisatorischen Gründen verwendet, aber ich denke, dass Hadoop je nach den Details Ihrer Daten und Abfragen eine geeignete Lösung sein kann.
Beachten Sie, dass XML sehr ausführlich ist. Einer Ihrer Hauptkosten wird Lesen / Schreiben auf die Festplatte. Wenn Sie können, wählen Sie ein kompakteres Format.
Die Anzahl der Knoten in Ihrem Cluster hängt vom Typ und der Anzahl der Festplatten und der CPU ab. Sie können für eine grobe Berechnung davon ausgehen, dass Sie durch die Plattengeschwindigkeit begrenzt werden. Wenn Ihre Festplatte mit 7200 U / min mit 50 MB / s gescannt werden kann und Sie 500 GB in 10 Sekunden scannen möchten, benötigen Sie 1000 Knoten.
Vielleicht möchten Sie mit Amazon EC2 spielen, wo Sie einen Hadoop-Cluster aufstellen und minutengenau bezahlen können, oder Sie können einen MapReduce-Job in der Infrastruktur ausführen.
Es klingt wie, was Sie wollen, ist eine gute altmodische Datenbank. Nicht ganz so trendy wie map / reduce, aber oft ausreichend für kleine Jobs wie diese. Abhängig davon, wie flexibel Ihre Filterung sein soll, können Sie entweder Ihre 5-GB-Datei in eine SQL-Datenbank importieren oder Sie können Ihr eigenes Indexierungsschema selbst implementieren, indem Sie entweder Datensätze in verschiedenen Dateien speichern und alles in einer riesigen Hashtabelle speichern. oder was auch immer für Ihre Bedürfnisse geeignet ist.
Tags und Links mapreduce