Map / Reduce ist eine bestimmte Form eines bestimmten Algorithmus. Sie verwenden es, um einen riesigen Datensatz in einen anderen Datensatz umzuwandeln. (Das Ergebnis-Dataset kann sehr groß sein oder auch nicht.) Wenn Sie keine statische Datenausgabe als Ergebnis einer statischen Dateneingabe wünschen, ist Map / Reduce nicht geeignet. Map / Reduce kann Ihnen leicht sagen, wie viele John Smiths im Manhattan-Telefonbuch vorhanden sind, eignet sich jedoch nicht zum Erstellen eines Webservers.
Die Funktionsweise von Map / Reduce ist:
- Map nimmt Schlüsselpaare (k1) und Werte (v1) und ordnet sie einem neuen Satz von Schlüsseln (k2) und Werten (v2) zu.
- Reduce nimmt alle v2-Werte mit demselben k2-Schlüssel und erzeugt einen neuen Wert (v3).
Das Ergebnis ist, dass eine Liste von (k1, v1) Paaren in eine Liste von (v3) s transformiert wird. (Natürlich kann der Wert "v3" eine Zusammensetzung sein, die k2 enthält, was definiert werden könnte, um gleich k1 zu sein.)
Also benutzt du es:
Wenn Sie so viele Daten haben, um damit zu beginnen, würde es zu lange dauern, alle nacheinander über einen oder zwei Server zu laufen, und
Sie können sich die Ausgabedaten als Liste von Werten oder Schlüsselwertpaaren vorstellen (im Allgemeinen nicht zu schwer, wenn Sie sich daran erinnern, dass "Schlüssel" nur "eindeutige Bezeichnung" bedeutet)
Unabhängig von der Beziehung können Sie sicher sein, dass sich die einzelnen Eingabedaten nur auf den Ausgabewert eines Ausgabeschlüssels auswirken.
Wenn Ihre Daten alle nacheinander von einem einzigen Server verarbeitet werden können, verwenden Sie einen einzigen Server, da dies das vorherrschende Computerparadigma ist (die Server, für die Programmierer ausgebildet sind).
Die Kartenbühne muss alle Eingabedaten nach Ausgabeschlüssel aufteilen. Es muss nicht den Ausgabewert erzeugen, der dem Ausgabeschlüssel zugeordnet ist (dies wird von der Reduktionsstufe durchgeführt), sondern es muss jedes Eingabeschlüsselwertpaar eindeutig zugewiesen werden, um zu höchstens einem Ausgabeschlüsselwert beizutragen. Wenn die Daten zu stark miteinander verknüpft sind, kann Map Reduce das Problem möglicherweise nicht lösen. Auf der anderen Seite kann es sein, dass Sie mehrere Runden der Karte / Verkleinerung verwenden müssen.
Wenn Sie nicht herausfinden können, wie Sie Ihre Datenumwandlung in eine Karte / Reduzierung umwandeln, ist dies natürlich keine Lösung.
Es ist eine echte Kunst herauszufinden, ob ein Problem in etwas zerlegt werden kann, das Map / Reduce handhaben kann. Beispielsweise befinden sich v1 und v2 möglicherweise überhaupt nicht in den Eingabe- oder Ausgabedatensätzen. Wenn Sie nur einzelne Elemente in den Eingabedaten zählen möchten, ist k1 = k2 = ein Element und v1 = v2 = 1 oder 0 oder wirklich alles. Reduce ergibt nur v3 als die Summe der Anzahl von k2, die es gegeben hat.
Es ist daher schwer zu sagen, dass eine Datentransformation mit Map / Reduce nicht durchgeführt werden kann, aber das oben Gesagte gibt Ihnen einige Wegweiser.