Dans ce blog, je vais vous montrer comment exécuter un programme MapReduce. MapReduce est l'une des parties centrales d'Apache Hadoop, c'est la couche de traitement d'Apache Hadoop. Donc, avant de vous montrer comment exécuter un programme MapReduce, laissez-moi vous expliquer brièvement MapReduce.
MapReduce est un système de traitement parallèle de grands ensembles de données. MapReduce réduit les données en résultats et crée un résumé des données. Un programme mapreduce comporte deux parties - mappeur et réducteur. Une fois que le mappeur a terminé son travail, seuls les réducteurs démarrent.
Mappeur : Il mappe les paires clé/valeur d'entrée à un ensemble de paires clé/valeur intermédiaires.
Réducteur : Il réduit un ensemble de valeurs intermédiaires qui partagent une clé à un ensemble plus petit de valeurs.
Fondamentalement, dans le programme wordcount mapreduce, nous fournissons un ou plusieurs fichiers d'entrée - n'importe quel fichier texte, en entrée. Lorsque le programme mapreduce démarre, voici les processus par lesquels il passe :
Fraction : Il divise chaque ligne du fichier d'entrée en mots.
Cartographie : Il forme une paire clé-valeur, où mot est la clé et 1 est la valeur attribuée à chaque clé.
Mélange : Les paires clé-valeur communes sont regroupées.
Réduire : Les valeurs des clés similaires sont additionnées.
Exécution du programme MapReduce
Un programme MapReduce est écrit en Java. Et surtout Eclipse IDE est utilisé pour la programmation par les développeurs. Donc, dans ce blog, je vais vous montrer comment exporter un programme mapreduce dans un fichier jar à partir d'Eclipse IDE et l'exécuter sur un cluster Hadoop.
Mon programme MapReduce est là dans mon Eclipse IDE.
Maintenant, pour exécuter ce programme MapReduce sur un cluster hadoop, nous allons exporter le projet sous forme de fichier jar. Sélectionnez l'option Fichier dans eclipse ide et cliquez sur Exporter. Dans l'option Java, sélectionnez le fichier Jar et cliquez sur Suivant.
Sélectionnez le projet Wordcount et donnez le chemin et le nom du fichier jar, je le garde wordcount.jar, Cliquez deux fois sur Suivant.
Maintenant, cliquez sur Parcourir et sélectionnez la classe principale et enfin cliquez sur Terminer pour créer le fichier jar. Si vous recevez un avertissement comme ci-dessous, cliquez simplement sur OK.
Vérifiez si votre cluster Hadoop est opérationnel et fonctionne ou non.
Commande : jps
hadoop@hadoop-VirtualBox:~$ jps
3008 NodeManager
3924 Jps
2885 ResourceManager
2505 DataNode
3082 JobHistoryServer
2716 SecondaryNameNode
2383 NameNode
hadoop@hadoop-VirtualBox:~$
Nous avons notre fichier d'entrée sur HDFS pour le programme de comptage de mots.
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:~$
Exécutez maintenant le fichier wordcount.jar en utilisant la commande ci-dessous.
Remarque : Puisque nous avons sélectionné la classe principale lors de l'exportation de wordcount.jar , il n'est donc pas nécessaire de mentionner la classe principale dans la commande.
Commande : 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:~$
Une fois le programme exécuté avec succès, accédez à HDFS et vérifiez le fichier de pièce dans le répertoire de sortie.
Vous trouverez ci-dessous la sortie du programme de comptage de mots.
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:~$
Conclusion
Cet exemple ici est en Java, vous pouvez également écrire un programme MapReduce en python. Nous avons exécuté avec succès un programme Hadoop MapReduce sur un cluster Hadoop sur Ubuntu 16.04. Les étapes pour exécuter un programme Mapreduce sur d'autres environnements Linux restent les mêmes. Assurez-vous qu'avant d'exécuter le programme, votre cluster Hadoop doit être opérationnel et votre fichier d'entrée doit également être présent dans HDFS.