Vous pouvez utiliser un exemple simple pour illustrer ce qu'est MapReduce:
Nous voulons compter le nombre de fois que chaque mot apparaît dans un grand fichier. Parce que le fichier est trop grand. Nous divisons ce fichier en petits fichiers, puis organisons plusieurs personnes à compter. Ce processus est "map". Fusionnez ensuite les nombres comptés par chaque personne, et c'est "réduire".
Si vous faites l'exemple ci-dessus dans MapReduce, vous devez créer un travail de tâche, qui divise le fichier en plusieurs blocs de données indépendants et les distribue dans différents nœuds de machine. Traitez-le ensuite de manière complètement parallèle à travers des tâches de carte disséminées dans différents nœuds. MapReduce collectera les lignes de sortie de la carte, puis enverra la sortie du résultat pour réduire la prochaine étape de traitement.
Pour le processus d'exécution spécifique d'une tâche, il y aura un processus appelé "Jobtracker" responsable de la coordination de toutes les tâches du processus d'exécution de MapReduce. Plusieurs processus TaskTracker sont utilisés pour exécuter des tâches de carte distinctes et signaler l'exécution de la tâche à Jobtracker à tout moment. Si un TaskTracker signale une tâche ou ne parvient pas à signaler sa propre tâche pendant longtemps, JobTracker lancera un autre TaskTracker pour réexécuter une tâche de carte distincte.
(1) Créer un projet Maven connexe sous Eclipse, en s'appuyant sur le package JAR comme suit (vous pouvez également vous référer à la configuration POM du projet Hadoop-Mapreduce-Examples sous le package de code source Hadoop)
Remarque: Pour configurer un plugin Maven Maven-Jar-Plugin et spécifier la classe principale
<Dependances> <Dependency> <GroupId> JUnit </rom grouped> <Artifactid> JUnit </ Artifactid> <Dersion> 4.11 </De version> </Dependency> <Dedency> <ProupId> org.apache.hadoop </prôdId> <ErtifactId> Hadoop-Mapreduce-Client-Core </ Artifactid> <version> 2.5.2.2 </ version> <ProupId> org.apache.hadoop </proupId> <Artifactid> Hadoop-Common </Retifactid> <Dersion> 2.5.2 </DERNIFRIENT> </DENDENCENCE> </DENDENCESS> <DUIBL> <GLANDS> <GLANGIND> <ProupID> org.apache.mavin.plugins </pruilid> <ArtifActid> Maven-Jar-Plugin </pruilid> <Carchive> <Mansofest> <Mainclass> com.xxx.demo.hadoop.wordcount.wordCount </-mainclass> </ manifest> </rchive> </figionfing> </gingin> </glugins> </ build>
(2) Selon le mécanisme de fonctionnement de MapReduce, un travail doit écrire au moins trois classes pour compléter les trois choses: la logique de la carte, réduire la logique et la planification de l'emploi.
Le code de la carte peut hériter d'org.apache.hadoop.mapreduce.mapper classe
Classe statique publique TokenizerMapper étend le mappeur <objet, texte, texte, intrwitable> {private final static intrwitable one = new intwitable (1); Texte privé Word = new Text (); // Étant donné que cet exemple n'utilise pas le paramètre de clé, le type de la touche est simplement spécifié en tant que Map d'objet public void (clé d'objet, valeur du texte, contexte de contexte) lance ioException, InterruptedException {StringTokenizer iTr = new StringTokenizer (value.toString ()); while (itr.hasmoretokens ()) {word.set (itr.nextToken ()); context.write (word, un); }}}Le code de réduction peut hériter d'org.apache.hadoop.mapreduce.reducer classe
La classe publique IntSumReducer étend le réducteur <texte, intrwitable, texte, intrwitable> {private intwitable result = new intwitable (); public void réduction (clé de texte, valeurs iTable <ntwitable>, contexte de contexte) lève IOException, InterruptedException {int sum = 0; for (intwitable val: valeurs) {sum + = val.get (); } result.set (sum); context.write (clé, résultat); }}Rédiger la méthode principale pour la planification des travaux
public static void main (String [] args) lève une exception {configuration conf = new Configuration (); Job Job = Job.getInstance (conf, "Word Count"); job.setjarbyclass (wordCount.class); job.setMapperClass (tokenizermapper.class); job.setcombinerclass (intsumReducer.class); job.setReducerclass (intsumReducer.class); job.setOutputKeyClass (text.class); job.setOutputValuClass (intwitable.class); FileInputFormat.addinputPath (travail, nouveau chemin (args [0])); FileoutputFormat.setOutputPath (travail, nouveau chemin (args [1])); job.AiTForCompletion (true); //System.exit(Job.WaitForCompletion(True)? 0: 1); }Exécutez l'installation de MVN pour saisir le projet dans un fichier JAR et téléchargez-le dans l'environnement du cluster Linux. Utilisez la commande HDFS DFS -MKDIR pour créer la commande correspondante dans le système de fichiers HDFS. Utilisez HDFS DFS -put pour télécharger les fichiers de données qui doivent être traités dans le système HDFS. Exemple: hdfs dfs -put $ {linux_path / fichier de données} $ {hdfs_path}
Exécutez la commande dans un environnement de cluster: hadoop jar $ {Linux_Path} /wordCount.jar $ {hdfs_input_path} $ {hdfs_output_path}
hdfs dfs -cat $ {hdfs_output_path} / nom de fichier de sortie
La méthode ci-dessus est exécutée en mode local lorsque l'environnement de cluster Hadoop n'est pas démarré. À l'heure actuelle, ni HDF ni le fil ne fonctionnent. Ce qui suit est le travail que vous devez faire lors de l'exécution du travail MapReduce en mode pseudo-distribué. Tout d'abord, extrait les étapes énumérées sur le site officiel:
Configurer le nom d'hôte
# vi /etc/sysconfig/network
Par exemple:
Networking = yeshostname = Mastervi / etc / hosts
Remplissez le contenu suivant
127.0.0.1 localhost
Configurer SSH sans intercommunication de mot de passe
ssh-keygen -t rsa
# cat?~/.ssh/id_rsa.pub?>>?~/.ssh/authorized_keys
Configurez le fichier core-site.xml (situé à $ {hadoop_home} / etc / hadoop /
<FIFIGRAGE> <AMPRESSION> <NAME> FS.DEFAULTFS </name> <value> hdfs: // localhost: 9000 </value> </ propriété> </ Configuration>
Configurer le fichier hdfs-site.xml
<FIFIGRAGE> <AMPRESSION> <NAME> DFS.Replication </name> <value> 1 </value> </ propriété> </FIGIGRAGE>
La commande suivante peut exécuter le travail MapReduce en mode pseudo-distribution autonome
1.Formatez le système de fichiers:
$ bin / hdfs namenode -format
2.SART Namenode Daemon et Datanode Daemon:
$ sbin / start-dfs.sh
3. La sortie du journal du démon Hadoop est écrite dans le répertoire $ hadoop_log_dir (par défaut à $ hadoop_home / logs).4.Poulez l'interface Web pour le NameNode; Par défaut, il est disponible à:
NameNode - http: // localhost: 50070 /
Faire les répertoires HDFS nécessaires pour exécuter des travaux MapReduce:
$ bin / hdfs dfs -mkdir / utilisateur
$ bin / hdfs dfs -mkdir / user / <nom d'utilisateur>
5.Copie les fichiers d'entrée dans le système de fichiers distribué:
$ bin / hdfs dfs -put etc / entrée hadoop
6.Run certains des exemples fournis:
$ bin / hadoop jar share / hadoop / mapreduce / hadoop-mapreduce-exemples-2.5.2.jar de sortie de l'entrée grep 'dfs [az.] +'
7.Examiner les fichiers de sortie:
Copiez les fichiers de sortie du système de fichiers distribué au système de fichiers local et examinez-les:$ BIN / HDFS DFS-Get Sortie
$ Cat Output / *
ouAffichez les fichiers de sortie du système de fichiers distribué:
$ bin / hdfs dfs -cat output / * *
8. Quand vous avez terminé, arrêtez les démons avec:
$ sbin / stop-dfs.sh
Ce qui précède est l'intégralité du contenu du code d'instance WordCount dans cet article, j'espère que cela sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!