FAQ HadoopConsultez toutes les FAQ

Nombre d'auteurs : 3, nombre de questions : 41, dernière mise à jour : 4 septembre 2014  Ajouter une question

 

Cette faq a été réalisée à partir des questions fréquemment posées sur les forums de http://www.developpez.com et de l'expérience personnelle des auteurs et de la traduction de la documentation officielle d'Hadoop.

Nous tenons à souligner que cette faq ne garantit en aucun cas que les informations qu'elle propose sont correctes. Les auteurs font leur maximum, mais l'erreur est humaine. Cette faq ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant rédacteur, lisez ceci.

Sur ce, nous vous souhaitons une bonne lecture.

L'équipe Big Data


SommaireMapReduce (8)
précédent sommaire suivant
 

MapReduce adresse deux choses. La première concerne le modèle de programmation MapReduce. La seconde concerne le framework d'implémentation MapReduce.

Le modèle de programmation fournit un cadre à un développeur afin d'écrire une fonction de Map et de Reduce. Tout l'intérêt de ce modèle de programmation est de simplifier la vie du développeur. Ainsi, ce développeur n'a pas à se soucier du travail de parallélisation et de distribution du travail, de récupération des données sur HDFS, de développements spécifiques à la couche réseaux pour la communication entre les nœuds, ou d'adapter son développement en fonction de l'évolution de la montée en charge (scalabilité horizontale, par exemple). Ainsi, le modèle de programmation permet au développeur de ne s'intéresser qu'à la partie algorithmique. Il transmet alors son programme MapReduce développé dans un langage de programmation au framework Hadoop pour l'exécution.

Le terme de « Job » MapReduce est couramment utilisé dans la littérature. Celui-ci concerne une unité de travail que le client souhaite réaliser. Cette unité est constituée de données d'entrée (contenues dans HDFS), d'un programme MapReduce (implémentation des fonctions map et reduce) et de paramètres d'exécution. Hadoop exécute ce Job en le subdivisant en deux groupes de tâches : les tâches de Map et les tâches de Reduce.

Mis à jour le 3 septembre 2014 Mickael Baron

La fonction map s'écrit de la manière suivante : map(clé1, valeur1) → List(clé2, valeur2). À partir d'un couple clé/valeur, la fonction map retourne un ensemble de nouveaux couples clé/valeur. Cet ensemble peut être vide, d'une cardinalité un ou plusieurs.

Pour expliquer les concepts de map, partons de l'exemple du compteur de mots fréquemment utilisés, avec une légère variante. Tous les mots sont comptabilisés à l'exception du mot « se ». Ci-dessous, le fichier exemple.txt présente un jeu de données comportant une seule ligne.

Code : Sélectionner tout
1
2
voiture la le elle de elle la se la maison voiture 
...
La clé d'entrée correspond au numéro de ligne dans le fichier et la valeur vaut : voiture, la, le, elle, de, elle, la, se, la, maison, voiture.

Le résultat de la fonction map est donné ci-dessous.

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
(voiture,1) 
(la,1) 
(le,1) 
(elle,1) 
(de,1) 
(elle,1) 
(la,1) 
(la,1) 
(maison,1) 
(voiture,1)

Mis à jour le 3 septembre 2014 Mickael Baron

La fonction reduce s'écrit de la manière suivante : reduce(clé2, List(valeur2)) → List(valeur2). À partir des groupes de valeurs associées à une clé, la fonctions reduce retourne généralement une valeur ou aucune, bien qu'il soit possible de retourner plus d'une valeur.

Suite à l'appel de la fonction reduce, le résultat de l'exemple est le suivant.

Code : Sélectionner tout
1
2
3
4
5
6
(de,1) 
(elle,2) 
(la,3)  
(le,1) 
(voiture,2) 
(maison,1)
Nous constatons que pour chaque clé, la fonction reduce effectue une somme de chaque élément de la liste.

Mis à jour le 3 septembre 2014 Mickael Baron

Non, il existe différents langages pour développer des Jobs MapReduce.

  • HadoopStreaming permet d'utiliser un script shell en tant que fonction map ou reduce.
  • libhdfs, une API C fondée sur l'interface Java JNI, qui permet de dialoguer uniquement avec HDFS.
  • Haddop Pipes, une interface C++ (non JNI) compatible avec SWIG (Simplified Wrapper and Interface Generator), pour écrire des traitements map et reduce.

Mis à jour le 29 août 2014

La fonctionnalité du cache distribué est utilisée pour diffuser aux nœuds les grands fichiers, en lecture seule, nécessaires aux traitements map et reduce. Le framework copie les fichiers nécessaires depuis une URL (HDFS ou HTTP) vers les nœuds esclaves avant le démarrage des tâches du traitement sur ce nœud. Ces fichiers ne sont copiés qu'une seule fois par traitement et ne doivent pas être modifiés par l'application.

En ce qui concerne le streaming, des informations supplémentaires sont disponibles sur le wiki et sur le Streaming Hadoop.

Copier du contenu dans le répertoire lib n'est pas recommandé et est même clairement déconseillé. Tout changement dans ce répertoire nécessitera le redémarrage des services Hadoop.

Mis à jour le 29 août 2014

Les fichiers de configuration ({core|mapred|hdfs}-site.xml), disponibles dans les différents répertoires conf/ de votre installation Hadoop, doivent être présents dans le CLASSPATH de votre application Java MapReduce pour qu'ils soient exploités et afin de s'assurer que les paramètres de configuration ne soient pas modifiés et de les déclarer comme final.

Code : Sélectionner tout
1
2
3
<name>mapreduce.task.io.sort.mb</name> 
<value>400</value> 
<final>true</final>
Rendre les propriétés de configuration finales est une chose que les administrateurs font couramment, comme l'indiquent les documents de l'API de Configuration.

Il est cependant préférable de faire en sorte qu'un service vous fournisse la configuration du Cluster sur demande depuis votre code. À ce sujet, cette page pourra peut-être vous intéresser.

Mis à jour le 2 septembre 2014

Le problème est que vous n'avez pas configuré le répertoire de votre système MapReduce avec une valeur fixe. Les valeurs par défaut fonctionnent pour un système à un seul nœud, mais pas pour un cluster multinoeud. Voici une configuration qui me convient :

Code : Sélectionner tout
1
2
3
4
5
6
7
 
<property> 
   <name>mapred.system.dir</name> 
   <value>/hadoop/mapred/system</value> 
   <description>The shared directory where MapReduce stores control files. 
   </description> 
</property>
À noter que ce répertoire est votre système de fichiers par défaut et qu'il doit être accessible à la fois depuis vos postes clients et machines serveurs ; il se trouve typiquement dans le système HDFS.

Mis à jour le 3 septembre 2014

Depuis une invite de commande, saisir la commande suivante :

Code : Sélectionner tout
hadoop job -kill JOBID

Mis à jour le 3 septembre 2014 Mickael Baron

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2017 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
Contacter le responsable de la rubrique Big Data