FAQ HadoopConsultez toutes les FAQ
Nombre d'auteurs : 4, nombre de questions : 78, dernière mise à jour : 10 août 2020 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
- Qu'est-ce que MapReduce ?
- Quel est le principe de la fonction Map ?
- Quel est le principe de la fonction reduce ?
- Suis-je obligé d'écrire mon Job avec le langage Java ?
- Comment puis-je soumettre du contenu additionnel (bibliothèque jar, fichiers statiques, etc.) à mon Job pendant l'exécution ?
- Comment prendre en compte ses propres paramètres de configuration pour l'exécution des applications Java MapReduce ?
- Comment lancer des Jobs MapReduce avec un utilisateur différent ?
- Comment arrêter proprement un Job en cours d'exécution ?
- Qu'est-ce que l'exécution spéculative dans Hadoop ?
MapReduce peut désigner deux choses. La première est le modèle de programmation MapReduce. La seconde est 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éseau 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.
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 ... |
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) |
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) |
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.
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.
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> |
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.
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 multinœud. 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> |
Depuis une invite de commande, saisir la commande suivante :
Code : | Sélectionner tout |
hadoop job -kill JOBID
L'exécution spéculative dans Hadoop est un mécanisme dans MapReduce qui permet d'assurer une exécution plus rapide des tâches. MapReduce divise les jobs en tâches et exécute ces tâches de manière parallèle plutôt que de manière séquentielle, ce qui permet de réduire le temps d'exécution. Le temps d'exécution global peut toutefois être plus long que prévu en raison de certains facteurs (comme la dégradation du matériel) qui peuvent ralentir des tâches. Plutôt que d'essayer de corriger les problèmes de lenteur d'exécution de ces tâches, Hadoop essaie juste de les détecter et de lancer des tâches backup. C'est ce processus qui est appelé exécution spéculative et les tâches backup sont appelées tâches spéculatives.
MapReduce lance des tâches spéculatives pour les tâches en cours d'exécution depuis un certain temps (une minute), et les tâches qui ne progressent pas beaucoup, en moyenne, par rapport aux autres tâches du job. Si la tâche initiale se termine avant la tâche spéculative, il mettra fin à la tâche spéculative. Dans le cas contraire, c'est la tâche initiale qui sera arrêtée. L'exécution spéculative est également implémentée dans Spark.
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 çaLes 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 © 2024 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.