MapReduce mit Apache Spark

Suraj P 21 Juni 2023
  1. ein Überblick über MapReduce
  2. MapReduce mit Apache Spark ausführen
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.

  1. JDK8
  2. Skala
  3. Hadoop
  4. 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.

Autor: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub