MapReduce mit Apache Spark
In diesem Artikel lernen wir, wie man einen MapReduce-Job mit Apache Spark mit Hilfe der Programmiersprache Scala durchführt.
ein Überblick über MapReduce
MapReduce ist ein Programmierparadigma von Hadoop und darauf ausgelegt, riesige Datenmengen parallel zu verarbeiten. Diese Verarbeitung bzw. die gesamte Arbeit erfolgt durch Aufteilung in kleinere Chunks, auch Tasks genannt.
Da dies einer master-slave-Architektur folgt, weist der master-Knoten die Aufgabe zu und die slave-Knoten erledigen die kleineren Aufgaben (Tasks). Diese slaves (Cluster von Servern) verarbeiten und geben individuelle Ausgaben.
MapReduce hat zwei Komponenten, eine ist ein mapper und eine andere ist ein reducer. In der ersten Phase werden die Daten in den Mapper eingespeist, der die eingehenden Daten in Schlüssel-Wert-Paare umwandelt.
Die vom Mapper erzeugte Ausgabe wird oft als Zwischenausgabe bezeichnet. Diese Ausgabe des Mappers wird als Eingabe an den Reduzierer gegeben, der die Aggregationssortierungsart der Berechnung basierend auf dem Schlüssel durchführt und das endgültige Schlüssel-Wert-Paar liefert, das unsere endgültige Ausgabe ist.
MapReduce mit Apache Spark ausführen
Obwohl MapReduce ein wichtiger Teil des Hadoop-Systems ist, können wir es auch mit Spark ausführen. Wir werden ein sehr bekanntes MapReduce-Programm sehen, das einen Wortzählcode als Beispiel verwendet, um es besser zu verstehen.
Die Problemstellung lautet also, dass wir bei einer gegebenen Textdatei die Häufigkeit jedes darin enthaltenen Wortes zählen müssen.
Voraussetzungen:
Diese Dinge sollten im System installiert werden, um das folgende Programm auszuführen.
- JDK8
- Skala
- Hadoop
- Funke
Wir müssen die Datei in das HDFS-Dateisystem legen und die spark-Shell starten.
Beispielcode: Der folgende Code wurde in der Spark-Shell ausgeführt.
val ourData = sc.textFile("myFile.txt");
ourData.collect;
val splitLines = ourData.flatMap(line => line.split(" "));
splitLines.collect;
val mapperData = splitLines.map(word => (word,1));
mapperData.collect;
val reducerData = mapperData.reduceByKey(_+_)
reducerData.collect
Wenn der obige Code ausgeführt wird, gibt er die Häufigkeit jedes in myfile.txt vorhandenen Wortes an.
