Wir wollen nun einen Map-Reduce-Job in unserem Hadoop-Cluster ausführen. Nehmen wir an, wir wollen herausfinden, welche Bewertung wie oft im Datensatz vorkommt, also beispielsweise wie viele 5.0-Sterne-Bewertungen im Datensatz vorhanden sind. Dazu müssen wir jedoch im Cluster noch ein paar Anwendungen nachinstallieren. Bitte starte dazu wieder die VirtualBox mit dem Hadoop-Image und logge dich danach wieder mittels Putty an deinem Hadoop-Cluster-Knoten an.
sudo yum install -y python-pip
sudo pip install mrjob==0.5.11
sudo yum install -y nano
wget https://jasonadam.de/hadoop/dateien/RatingsBreakdown.py
wget https://jasonadam.de/hadoop/dateien/ratings.csv
Mit diesen Befehlen wird eine Python-Umgebung auf deiner VirtualBox mit Hadoop eingerichtet. Danach laden wir „MRJob“ als Pythonpaket herunter, um mit Python MapReduce-Skripte schreiben zu können. Zusätzlich installieren wir noch den Editor „nano“. Zum Abschluss laden wir die beiden Dateien „ratings.csv“ mit den FilmIDs, UserIDs und dem Zeitstempel sowie die Datei „RatingsBreakdown.py“ herunter, welche das MapReduce-Skript enthält. Du kannst die ratings.csv auch gerne aus deinem Datensatz nehmen. Dieses enthält folgendes (hinter #
stehen die Kommentare:
from mrjob.job import MRJob #Import der notwendigen Bibliotheken
from mrjob.step import MRStep #Import der notwendigen Bibliotheken
class RatingsBreakdown(MRJob): #beide folgende Klassen werden in einer Klasse zusammengefasst
def steps(self):
return [
MRStep(mapper=self.mapper_get_ratings,
reducer=self.reducer_count_ratings)
]
def mapper_get_ratings(self, _, line): #Funktion, welche jede Zeile untersucht
(userID, movieID, rating, timestamp) = line.split(',') #Variablen mit Teilungszeichen
yield rating, 1 #gibt "rating" zurück
def reducer_count_ratings(self, key, values): #Funktion mit 3 Inputparametern
yield key, sum(values) #gibt key mit der Summe der Werte zurück
if __name__ == '__main__': #Teil zum Ausführen des Skriptes über die CLI
RatingsBreakdown.run()
Bitte führe nun den MapReduce-Skript über die Konsole aus:
python RatingsBreakdown.py ratings.csv
Du siehst hier die erfolgreiche Ausführung des MapReduce-Skriptes. Dabei werden dir die Bewertungen von 0,5 bis 5,0 angezeigt sowie wie oft diese Bewertung vergeben wurde.
Wir haben hier jedoch nur ein Pythonskript genutzt und haben nicht den Hadoop-Cluster verwendet. Dies machen wir nun mit folgendem Befehl:
python RatingsBreakdown.py -r hadoop --hadoop-streaming-jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-streaming.jar ratings.csv
Unsere Bewertungsdatei „ratings.csv“ wird dazu in das HDFS geladen und dann über MapReduce, wie wir es programmiert haben, bearbeitet.
Fertig, du hast nun ein MapReduce-Job gestartet und dein Hadoop-Cluster dazu verwendet!
Weiter geht es mit: 3.1 Grundlagen von Ambari