In diesem Blog zeige ich Ihnen, wie Sie ein MapReduce-Programm ausführen. MapReduce ist einer der Kernbestandteile von Apache Hadoop, es ist die Verarbeitungsschicht von Apache Hadoop. Bevor ich Ihnen also zeige, wie man ein MapReduce-Programm ausführt, möchte ich Ihnen kurz MapReduce erklären.
MapReduce ist ein System zur parallelen Verarbeitung großer Datensätze. MapReduce reduziert die Daten zu Ergebnissen und erstellt eine Zusammenfassung der Daten. Ein MapReduce-Programm besteht aus zwei Teilen - Mapper und Reducer. Nachdem der Mapper seine Arbeit beendet hat, starten nur noch Reducer.
Mapper : Es ordnet eingegebene Schlüssel/Wert-Paare einem Satz von Zwischenschlüssel/Wert-Paaren zu.
Reduzierer : Es reduziert eine Menge von Zwischenwerten, die einen gemeinsamen Schlüssel haben, auf eine kleinere Menge von Werten.
Grundsätzlich stellen wir im wordcount mapreduce-Programm Eingabedatei(en) bereit – jede beliebige Textdatei als Eingabe. Wenn das mapreduce-Programm startet, durchläuft es folgende Prozesse:
Aufteilen : Es teilt jede Zeile in der Eingabedatei in Wörter auf.
Zuordnung : Es bildet ein Schlüsselwertpaar, wobei word der Schlüssel und 1 der jedem Schlüssel zugewiesene Wert ist.
Shuffling : Gemeinsame Schlüsselwertpaare werden gruppiert.
Reduzierung : Die Werte ähnlicher Schlüssel werden addiert.
Laufendes MapReduce-Programm
Ein MapReduce-Programm ist in Java geschrieben. Und meistens wird Eclipse IDE für die Programmierung von den Entwicklern verwendet. Daher zeige ich Ihnen in diesem Blog, wie Sie ein MapReduce-Programm aus der Eclipse-IDE in eine JAR-Datei exportieren und auf einem Hadoop-Cluster ausführen.
Mein MapReduce-Programm befindet sich in meiner Eclipse-IDE.
Um dieses MapReduce-Programm nun auf einem Hadoop-Cluster auszuführen, exportieren wir das Projekt als JAR-Datei. Wählen Sie in der Eclipse-IDE die Option Datei und klicken Sie auf Exportieren. Wählen Sie in der Java-Option die Jar-Datei aus und klicken Sie auf Weiter.
Wählen Sie das Wordcount-Projekt aus und geben Sie den Pfad und den Namen für die JAR-Datei an, ich behalte sie wordcount.jar. Klicken Sie zweimal auf Weiter.
Klicken Sie nun auf Durchsuchen und wählen Sie die Hauptklasse aus und klicken Sie schließlich auf Fertig stellen, um die JAR-Datei zu erstellen. Falls Sie eine der folgenden Warnungen erhalten, klicken Sie einfach auf OK.
Überprüfen Sie, ob Ihr Hadoop-Cluster aktiv ist und funktioniert oder nicht.
Befehl: jps
hadoop@hadoop-VirtualBox:~$ jps
3008 NodeManager
3924 Jps
2885 ResourceManager
2505 DataNode
3082 JobHistoryServer
2716 SecondaryNameNode
2383 NameNode
hadoop@hadoop-VirtualBox:~$
Wir haben unsere Eingabedatei auf HDFS für das Wordcount-Programm.
hadoop@hadoop-VirtualBox:~$ hdfs dfs -put input /
hadoop@hadoop-VirtualBox:~$ hdfs dfs -cat /input
This is my first mapreduce test
This is wordcount program
hadoop@hadoop-VirtualBox:~$
Führen Sie nun die Datei wordcount.jar mit dem folgenden Befehl aus.
Hinweis: Da wir beim Export von wordcount.jar die Hauptklasse ausgewählt haben, muss die Hauptklasse im Befehl nicht erwähnt werden.
Befehl: hadoop jar wordcount.jar /input /output
hadoop@hadoop-VirtualBox:~$ hadoop jar wordcount.jar /input /output
16/11/27 22:52:20 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:
8032
16/11/27 22:52:22 WARN mapreduce.JobResourceUploader: Hadoop command-line option
parsing not performed. Implement the Tool interface and execute your application
with ToolRunner to remedy this.
16/11/27 22:52:27 INFO input.FileInputFormat: Total input paths to process : 1
16/11/27 22:52:28 INFO mapreduce.JobSubmitter: number of splits:1
16/11/27 22:52:29 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_14802
67251741_0001
16/11/27 22:52:32 INFO impl.YarnClientImpl: Submitted application application_14802
67251741_0001
16/11/27 22:52:33 INFO mapreduce.Job: The url to track the job: http://hadoop-Virtu
alBox:8088/proxy/application_1480267251741_0001/
16/11/27 22:52:33 INFO mapreduce.Job: Running job: job_1480267251741_0001
16/11/27 22:53:20 INFO mapreduce.Job: Job job_1480267251741_0001 running in uber mo
de : false
16/11/27 22:53:20 INFO mapreduce.Job: map 0% reduce 0%
16/11/27 22:53:45 INFO mapreduce.Job: map 100% reduce 0%
16/11/27 22:54:13 INFO mapreduce.Job: map 100% reduce 100%
16/11/27 22:54:15 INFO mapreduce.Job: Job job_1480267251741_0001 completed
successfully
16/11/27 22:54:16 INFO mapreduce.Job: Counters: 49
File System Counters
FILE: Number of bytes read=124
FILE: Number of bytes written=237911
FILE: Number of read operations=0
FILE: Number of large read operations=0
FILE: Number of write operations=0
HDFS: Number of bytes read=150
HDFS: Number of bytes written=66
HDFS: Number of read operations=6
HDFS: Number of large read operations=0
HDFS: Number of write operations=2
Job Counters
Launched map tasks=1
Launched reduce tasks=1
Data-local map tasks=1
Total time spent by all maps in occupied slots (ms)=21062
Total time spent by all reduces in occupied slots (ms)=25271
Total time spent by all map tasks (ms)=21062
Total time spent by all reduce tasks (ms)=25271
Total vcore-milliseconds taken by all map tasks=21062
Total vcore-milliseconds taken by all reduce tasks=25271
Total megabyte-milliseconds taken by all map tasks=21567488
Total megabyte-milliseconds taken by all reduce tasks=25877504
Map-Reduce Framework
Map input records=2
Map output records=10
Map output bytes=98
Map output materialized bytes=124
Input split bytes=92
Combine input records=0
Combine output records=0
Reduce input groups=8
Reduce shuffle bytes=124
Reduce input records=10
Reduce output records=8
Spilled Records=20
Shuffled Maps =1
Failed Shuffles=0
Merged Map outputs=1
GC time elapsed (ms)=564
CPU time spent (ms)=4300
Physical memory (bytes) snapshot=330784768
Virtual memory (bytes) snapshot=3804205056
Total committed heap usage (bytes)=211812352
Shuffle Errors
BAD_ID=0
CONNECTION=0
IO_ERROR=0
WRONG_LENGTH=0
WRONG_MAP=0
WRONG_REDUCE=0
File Input Format Counters
Bytes Read=58
File Output Format Counters
Bytes Written=66
hadoop@hadoop-VirtualBox:~$
Nachdem das Programm erfolgreich ausgeführt wurde, gehen Sie zu HDFS und überprüfen Sie die Teildatei im Ausgabeverzeichnis.
Unten ist die Ausgabe des Wordcount-Programms.
hadoop@hadoop-VirtualBox:~$ hdfs dfs -cat /output/part-r-00000
This 2
first 1
is 2
mapreduce 1
my 1
program 1
test 1
wordcount 1
hadoop@hadoop-VirtualBox:~$
Schlussfolgerung
Dieses Beispiel hier ist in Java, Sie können ein MapReduce-Programm auch in Python schreiben. Wir haben erfolgreich ein Hadoop MapReduce-Programm auf einem Hadoop-Cluster unter Ubuntu 16.04 ausgeführt. Die Schritte zum Ausführen eines Mapreduce-Programms in anderen Linux-Umgebungen bleiben gleich. Stellen Sie vor dem Ausführen des Programms sicher, dass Ihr Hadoop-Cluster betriebsbereit ist und Ihre Eingabedatei in HDFS vorhanden ist.