Inhaltsverzeichnis:
- Die Kartenfunktion für Big Data
- Wie die Kartenfunktion ist
- Manchmal ist es gerade genug, eine Output-Liste zu erstellen. Ebenso ist es manchmal ausreichend, Operationen an jedem Element einer Liste durchzuführen. Meistens möchten Sie große Mengen von Eingabedaten durchsuchen, bestimmte Elemente aus den Daten auswählen und dann aus den relevanten Datenelementen einen Wert berechnen.
Video: Big Data & Smart Data: Definition, Beispiel und praktischer Nutzen für Unternehmen 2024
MapReduce ist ein Software-Framework, das sich ideal für Big Data eignet, da es Entwicklern ermöglicht, Programme zu schreiben, die große Mengen an unstrukturierten Daten parallel über eine verteilte Gruppe von Prozessoren verarbeiten können.
Die Kartenfunktion für Big Data
Die Funktion map ist seit Jahren Bestandteil vieler funktionaler Programmiersprachen. Karte wurde als Kerntechnologie für die Verarbeitung von Listen von Datenelementen neu belebt.
Operatoren in funktionalen Sprachen verändern die Struktur der Daten nicht; Sie erzeugen neue Datenstrukturen als ihre Ausgabe. Die ursprünglichen Daten selbst sind ebenfalls unverändert. So können Sie die Kartenfunktion ungestraft nutzen, da Ihre wertvollen gespeicherten Daten nicht beschädigt werden.
Ein weiterer Vorteil der funktionalen Programmierung besteht darin, dass die Bewegung oder der Fluss der Daten nicht ausdrücklich verwaltet werden muss. Dies enthebt den Programmierer der expliziten Verwaltung der Datenausgabe und -platzierung. Schließlich ist die Reihenfolge der Operationen an den Daten nicht vorgeschrieben.
Ein Weg, um die Lösung zu erreichen, besteht darin, die Eingabedaten zu identifizieren und eine Liste zu erstellen:
mylist = ("alle Bezirke in den USA, die an den letzten allgemeinen Wahlen teilgenommen haben") > Legen Sie die Funktion howManyPeople mit der Kartenfunktion
an. Dies wählt nur die Kreise mit mehr als 50 000 Personen aus: map howManyPeople (mylist) = [howManyPeople "county 1"; howManyPeople "Grafschaft 2"; howManyPeople "Grafschaft 3"; howManyPeople "Grafschaft 4"; …]
Erstellen Sie nun eine neue Ausgabeliste aller Kreise mit Bevölkerungszahlen größer als 50 000:
Die Funktion wird ausgeführt, ohne Änderungen an der ursprünglichen Liste vorzunehmen. Außerdem können Sie sehen, dass jedes Element der Ausgabeliste einem entsprechenden Element der Eingabeliste zugeordnet ist, mit einem Ja oder Nein. Wenn der Landkreis die Anforderung von mehr als 50.000 Menschen erfüllt hat, identifiziert die Kartenfunktion es mit einem Ja. Wenn nicht, wird ein Nein angezeigt.
Wie die Kartenfunktion ist
reduce seit vielen Jahren ein Merkmal funktionaler Programmiersprachen. Die Reduzierfunktion nimmt die Ausgabe einer Abbildungsfunktion und "reduziert" die Liste auf beliebige Weise, die der Programmierer wünscht. Der erste Schritt, den die Reduktionsfunktion erfordert, besteht darin, einen Wert in einen so genannten
-Akkumulator , zu setzen, der einen Anfangswert enthält. Nach dem Speichern eines Startwerts im Akkumulator verarbeitet die Reduzierfunktion dann jedes Element der Liste und führt die Operation durch, die Sie über die Liste benötigen.
Angenommen, Sie müssen die Landkreise ermitteln, in denen die Mehrheit der Stimmen für den demokratischen Kandidaten war. Denken Sie daran, dass Ihre Kartenfunktion "howManyPeople" jedes Element der Eingabeliste betrachtet und eine Ausgabeliste der Bezirke mit mehr als 50.000 Personen (Ja) und der Bezirke mit weniger als 50.000 Personen (Nein) erstellt hat.
(Nein, Kreis 1; Ja, Kreis 2; Nein, Kreis 3; Ja, Kreis 4;?), Kreis nnn)
Dies ist jetzt die Eingabe für Ihre Reduzierfunktion. Hier ist, wie es aussieht:
countylist = (no, county 1; ja, county 2; nein, county 3; ja, county 4;?, County nnn) reduce isDemocrat (countylist)
Die reduzierten Funktionsprozesse Jedes Element der Liste und gibt eine Liste aller Landkreise mit einer Bevölkerung von mehr als 50 000, wo die Mehrheit der Demokraten wählte.
Die Big-Data-Map zusammenlegen und verkleinern
Manchmal ist es gerade genug, eine Output-Liste zu erstellen. Ebenso ist es manchmal ausreichend, Operationen an jedem Element einer Liste durchzuführen. Meistens möchten Sie große Mengen von Eingabedaten durchsuchen, bestimmte Elemente aus den Daten auswählen und dann aus den relevanten Datenelementen einen Wert berechnen.
Sie möchten diese Eingabeliste nicht ändern, damit Sie sie mit neuen Annahmen und neuen Daten unterschiedlich verwenden können.
Softwareentwickler entwerfen Anwendungen, die auf Algorithmen basieren. Ein
-Algorithmus ist nichts weiter als eine Reihe von Schritten, die im Dienste eines Gesamtziels stattfinden müssen. Es könnte ein wenig so aussehen: Beginnen Sie mit einer großen Zahl oder Daten oder Datensätzen.
-
Durchlaufen Sie die Daten.
-
Verwenden Sie die Kartenfunktion, um etwas Interessantes zu extrahieren und eine Ausgabeliste zu erstellen.
-
Organisieren Sie die Ausgabeliste, um sie für die weitere Verarbeitung zu optimieren.
-
Verwenden Sie die Funktion "Reduzieren", um eine Reihe von Ergebnissen zu berechnen.
-
Erzeugt die endgültige Ausgabe.
-
Programmierer können alle Arten von Anwendungen unter Verwendung dieses Ansatzes implementieren, aber die Beispiele bis zu diesem Punkt waren sehr einfach, so dass der tatsächliche Wert von MapReduce möglicherweise nicht offensichtlich ist. Was passiert, wenn Sie extrem große Eingabedaten haben? Können Sie den gleichen Algorithmus für Terabytes an Daten verwenden? Die gute Nachricht ist ja.
Alle Operationen scheinen unabhängig zu sein. Das ist, weil sie es sind. Die wahre Stärke von MapReduce ist die Fähigkeit zu teilen und zu erobern. Nimm ein sehr großes Problem und zerlege es in kleinere, überschaubare Brocken, bearbeite jeden einzelnen Brocken selbstständig und ziehe ihn dann am Ende zusammen. Außerdem ist die Zuordnungsfunktion kommutativ - mit anderen Worten spielt die Reihenfolge, in der eine Funktion ausgeführt wird, keine Rolle.
So kann MapReduce seine Arbeit auf verschiedenen Computern in einem Netzwerk ausführen. Es kann auch aus mehreren internen oder externen Datenquellen auswählen. MapReduce verfolgt seine Arbeit, indem es einen eindeutigen Schlüssel erstellt, um sicherzustellen, dass die gesamte Verarbeitung mit der Lösung desselben Problems zusammenhängt.Dieser Schlüssel wird auch verwendet, um alle Ausgaben am Ende aller verteilten Aufgaben zusammenzuziehen.