Wie Verwenden von MapReduce für Big Data

MapReduce ist ein Software-Framework, die für große Daten ideal ist, weil es Entwicklern ermöglicht, Programme zu schreiben, die in einer verteilten Gruppe von Prozessoren große Mengen an unstrukturierten Daten parallel verarbeiten kann.

Die Kartenfunktion für große Daten

Das Karte Funktion ist seit Jahren ein Teil von vielen funktionalen Programmiersprachen gewesen. Karte wurde als Kerntechnologie für die Verarbeitung von Listen von Datenelementen neu belebt.

Die Betreiber in funktionalen Sprachen nicht ändern die Struktur der Daten- sie neue Datenstrukturen als ihre Ausgabe erstellen. Die Originaldaten selbst als auch unmodifiziert. So können Sie die Map-Funktion ungestraft benutzen, weil es nicht Ihre wertvollen gespeicherten Daten schaden wird.

Ein weiterer Vorteil der funktionalen Programmierung ist nicht mit ausdrücklich auf die Bewegung oder Fluss der Daten zu verwalten. Dies entbindet den Programmierer von explizit die Datenausgabe und Platzierung zu verwalten. Schließlich wird die Reihenfolge der Operationen an den Daten nicht vorgeschrieben.

Eine Möglichkeit, die Lösung zu erreichen, ist die Eingabedaten zu identifizieren und eine Liste zu erstellen:

mylist = ( "alle Kreise in den USA, die in der jüngsten allgemeinen Wahlen teilgenommen")

Erstellen Sie die Funktion wie viele Leute mit Hilfe der Kartenfunktion. Dies wählt nur die Landkreise mit mehr als 50.000 Menschen:

Karte howManyPeople (mylist) = [howManyPeople "Kreis 1" - howManyPeople "Kreis 2" - howManyPeople "Kreis 3" - howManyPeople "Kreis 4" -. . . ]

Jetzt produzieren eine neue Ausgabeliste aller Landkreise mit einer Bevölkerung von mehr als 50.000:

(Nein, Kreis 1- ja, Kreis 2- nein, Kreis 3- ja, Kreis 4-?, Landkreis nnn)

Die Funktion ausführt, ohne dass Änderungen an der ursprünglichen Liste. Darüber hinaus können Sie sehen, dass jedes Element der Ausgabeliste Karten zu einem entsprechenden Element der Eingabeliste, mit einem ja oder Nein angebracht. Wenn der Kreis die Forderung von mehr als 50.000 Menschen getroffen hat, identifiziert die Kartenfunktion mit ein ja. Wenn nicht, ein Nein ist angedeutet.

Fügen Sie die Funktion reduzieren für große Datenmengen

Wie die Kartenfunktion, reduzieren ein Merkmal funktionaler Programmiersprachen für viele Jahre gewesen. Die Verringerung Funktion nimmt die Ausgabe einer Map-Funktion und # 147-reduziert # 148- die Liste in welcher Art und Weise der Programmierer wünscht.

Der erste Schritt, dass die Verringerung Funktion erfordert ist, einen Wert in etwas zu platzieren ein genannt Akkumulator, was hält einen Anfangswert. Nach dem Speichern eines Startwerts im Speicher verarbeitet die Funktion reduzieren dann jedes Element der Liste und führt die Operation, die Sie in der Liste benötigen.

Am Ende der Liste, gibt die Funktion reduzieren Wert basierend auf welche Operation Sie wollten auf der Ausgabeliste auszuführen.

Nehmen wir an, dass Sie die Bezirke, in denen die Mehrheit der abgegebenen Stimmen waren für den demokratischen Kandidaten zu identifizieren müssen. Denken Sie daran, dass Ihr wie viele Leute Kartenfunktion betrachtete jedes Element der Eingabeliste und erstellt eine Ausgabeliste der Landkreise mit mehr als 50.000 Menschen (ja) Und die Landkreise mit weniger als 50.000 Menschen (Nein).

Nach dem Aufruf wie viele Leute Map-Funktion, werden Sie mit der folgenden Ausgabe Liste links:

(Nein, Kreis 1- ja, Kreis 2- nein, Kreis 3- ja, Kreis 4-?, Landkreis nnn)

Dies ist nun der Eingang für Ihre Funktion zu reduzieren. Hier ist, wie es aussieht:

countylist = (nein, Kreis 1- ja, Kreis 2- nein, Kreis 3- ja, Kreis 4-?, Landkreis nnn) reduzieren isDemocrat (countylist)

Die Funktionsabläufe jedes Element der Liste zu verringern und gibt eine Liste aller Gemeinden mit einer Bevölkerung von mehr als 50.000, in denen die Mehrheit der Demokratischen gestimmt.

Setzen Sie die große Datenkarte und reduzieren zusammen

Manchmal eine Ausgabeliste herzustellen, ist gerade genug. Ebenso manchmal Operationen an jedes Element einer Liste der Durchführung genügt. Meistens möchte man durch große Mengen an Eingangsdaten zu suchen, wählen bestimmte Elemente aus den Daten, und dann etwas von Wert aus den entsprechenden Teilen von Daten berechnen.

Sie wollen nicht, dass die Eingabeliste zu ändern, so dass Sie es auf unterschiedliche Weise mit neuen Annahmen und neue Daten verwenden können.

Software-Entwickler-Design-Anwendungen auf Basis von Algorithmen. Ein Algorithmus ist nicht mehr als eine Reihe von Schritten, die im Betrieb zu einem Gesamtziel auftreten müssen. Es könnte ein wenig wie folgt aussehen:

  1. Beginnen mit einer großen Anzahl oder Daten oder Datensätzen.

  2. Iterate die Daten über.

  3. Über die Karte Funktion etwas von Interesse zu extrahieren und eine Ausgabeliste erstellen.

  4. Organisieren Sie die Ausgabeliste für die Weiterverarbeitung zu optimieren.

  5. Verwenden Sie die Funktion reduzieren einen Satz von Ergebnissen zu berechnen.

  6. Produzieren die endgültige Ausgabe.

Programmierer können alle Arten von Anwendungen mit diesem Ansatz zu implementieren, aber die Beispiele zu diesem Punkt haben sich sehr einfach gewesen, so dass der reale Wert von MapReduce nicht ersichtlich. Was passiert, wenn man extrem große Eingangsdaten haben? Können Sie den gleichen Algorithmus auf Terabytes von Daten verwenden? Die gute Nachricht lautet: Ja.

Alle Operationen scheinen unabhängig. Das ist, weil sie sind. Die wahre Stärke von MapReduce ist die Fähigkeit, sich zu teilen und zu erobern. Nehmen Sie ein sehr großes Problem und brechen sie in kleinere, überschaubare Einheiten, arbeiten unabhängig an jedem Stück, und dann ziehen sie alle zusammen am Ende. Darüber hinaus ist die Kartenfunktion kommutativ - mit anderen Worten, dass die Reihenfolge eine Funktion ausgeführt wird, spielt keine Rolle.

bild0.jpg

So kann MapReduce seine Arbeit auf verschiedenen Rechnern in einem Netzwerk durchführen. Es kann auch aus mehreren Datenquellen, intern oder extern zu ziehen. MapReduce verfolgt die Spuren seiner Arbeit durch einen eindeutigen Schlüssel zu schaffen, um sicherzustellen, dass die gesamte Verarbeitung zur Lösung des gleichen Problems in Zusammenhang steht. Dieser Schlüssel wird auch ziehen alle Ausgaben zusammen am Ende aller verteilten Aufgaben verwendet.

Menü