Hadoop
Introduction
« J’ai pu voir plus loin en m’appuyant sur les épaules des géants. » (Isaac Newton)
Ce chapitre explique pas à pas et techniquement comment développer des jobs MapReduce et comment ils sont exécutés dans un cluster Hadoop. Il détaille également le fonctionnement d’Hadoop. Le MapReduce est une approche conceptuelle, elle a besoin d’être implémentée pour être utilisée. Hadoop répond à cette demande : Hadoop est l’implémentation la plus populaire et la plus mature du MapReduce sur le marché. Développé par Doug Cutting, le projet Hadoop a été repris par la fondation Apache depuis 2009 et est actuellement disponible en open source avec son système de fichiers HDFS. En réalité, Hadoop est un ensemble de classes écrites en Java pour la programmation des tâches MapReduce et HDFS dont les implémentations sont disponibles en plusieurs autres langages de programmation.
Une classe est une notion relative aux méthodes orientées objet. C’est une structure abstraite qui décrit un objet du monde réel sous deux angles : ses propriétés (caractéristiques) et ses méthodes (les actions qu’il peut effectuer). Par exemple, la classe...
Spécificités d’un cluster Hadoop
Avant de parler de l’exécution des jobs MapReduce dans Hadoop, nous allons en présenter les spécificités, c’est-à-dire les caractéristiques fonctionnelles et techniques. Dans le chapitre Architecture infrastructurelle d’Hadoop, nous avons présenté ce qu’est une architecture de cluster. Dans le même chapitre, nous avons également présenté les configurations possibles d’un cluster et la configuration indispensable d’un cluster Hadoop (shared-nothing, maître/esclave). Ici nous allons présenter les propriétés d’un cluster Hadoop. Premièrement, commençons par la terminologie propre à Hadoop. Un job MapReduce est une unité de travail que le client veut exécuter. Il consiste en trois choses : le fichier des données à traiter, le programme MapReduce et les informations de configuration (métadonnées). Le cluster exécute le job MapReduce en divisant le programme MapReduce en deux tâches : les tâches Map et les tâches Reduce. Dans le cluster Hadoop, il y a deux types de processus qui contrôlent l’exécution du job : le jobtracker et un ensemble de tasktrackers. Le jobtracker est le processus central qui est démarré sur le nœud de référence, il coordonne tous les jobs qui s’exécutent sur le cluster, gère les ressources du cluster et planifie les tâches à exécuter sur les tasktrackers. Les tasktrackers sont les processus qui traitent le programme MapReduce de l’analyste, ils sont démarrés au niveau des nœuds de données, exécutent les tâches Map ou Reduce et envoient des rapports d’avancement au jobtracker, qui garde une copie du progrès général de chaque job. Si une tâche échoue, le jobtracker peut la replanifier sur un tasktracker différent. En fait, le jobtracker désigne le nœud de référence et le processus master qui y est démarré, tandis que le tasktracker désigne un nœud de données et le processus worker qui y est démarré....
Détails d’exécution du MapReduce dans un cluster Hadoop
Nous allons présenter succinctement les étapes d’exécution d’un traitement MapReduce dans un cluster Hadoop. Les étapes d’exécution du MapReduce dans un cluster Hadoop sont assez comparables aux étapes citées à la section Détails techniques de l’exécution du MapReduce dans un cluster du chapitre MapReduce. Il existe tout de même quelques changements stratégiques dans Hadoop.
Le traitement MapReduce écrit par l’utilisateur s’appelle un job MapReduce dans la terminologie du cluster Hadoop et s’exécute également en sept étapes :
1 |
Au départ, l’utilisateur configure le job MapReduce : il écrit la fonction Map, la fonction Reduce, spécifie le nombre r de tâches Reduce, le format de lecture du fichier d’entrée, le format de sortie des r fichiers Reduce, éventuellement la taille des blocs du fichier d’entrée et le facteur de réplication. |
Le facteur de réplication est le nombre de fois qu’un bloc de fichier est répliqué dans le cluster par le HDFS. Il est défini par l’utilisateur et par défaut est égal à 3. Par exemple, un facteur de réplication égal à 3 signifie que chaque bloc de fichier est répliqué trois fois dans trois différents nœuds du cluster par le HDFS.
Une fois que tout cela est fait et qu’il déclenche l’exécution du job, le jobtracker démarre les r tasktrackers qui vont effectuer les r tâches Reduce que l’utilisateur a spécifiées. |
|
2 |
Le HDFS découpe le fichier d’entrée en blocs de taille fixe, généralement 64 Mo par bloc (sauf si l’utilisateur a spécifié une taille de bloc différente à la première étape). Ensuite, le HDFS réplique ces blocs selon le facteur de réplication défini par l’utilisateur (3 par défaut) et les distribue de façon redondante dans des nœuds différents dans le cluster. Le fait de diviser le fichier d’entrée en blocs de taille fixe permet de répartir de façon équilibrée la charge... |
Gestion des défaillances dans un cluster Hadoop
Dans un cluster, le nombre de pannes s’accroît avec l’augmentation des nœuds. Certains font même état d’une panne de nœud toutes les heures lorsque le cluster atteint la barre des 1 000 nœuds. Que cette statistique soit vérifiée ou pas, toujours est-il que dans le cluster, les pannes et les défaillances de toute sorte sont quelque chose de normal. L’exécution des jobs MapReduce et de tout autre modèle de calcul doit alors prendre en compte ces défaillances dans les traitements. Dans un cluster Hadoop, trois types de défaillances peuvent survenir et empêcher les jobs de bien se terminer : la panne du nœud de référence, la panne des nœuds de données et les « retardataires » (stragglers). Nous allons vous montrer comment Hadoop gère ces défaillances.
1. Gestion de la défaillance du nœud de référence
Le nœud de référence est la machine la plus importante du cluster. En plus de maintenir le référentiel de la localisation de tous les blocs de fichiers sérialisés dans tous les nœuds du cluster et dans le HDFS, c’est à partir de lui que toutes les tâches MapReduce sont planifiées. Il est un point critique du cluster et dès lors, s’il tombe en panne, le cluster Hadoop tout entier arrête de fonctionner tout simplement. De plus, le mode de communication des nœuds du cluster étant maître/esclave...
Hadoop Streaming
Hadoop a été conçu à l’origine pour les développeurs, mais dans le Numérique, il y a de bonnes raisons de croire qu’Hadoop va devenir l’outil par défaut d’exploitation des données, un peu comme Microsoft Excel est devenu progressivement l’outil par défaut des utilisateurs métier. Le problème, c’est qu’Hadoop est une implémentation Java. Or, presque aucun utilisateur métier n’a de connaissances en programmation Java alors que le développement des algorithmes Map et Reduce, les jobs et leur configuration se font en Java. Pour faciliter l’adoption d’Hadoop par les utilisateurs métier, Apache a ajouté à Hadoop un utilitaire appelé Hadoop Streaming. Cet utilitaire permet de créer des jobs MapReduce dans d’autres langages que Java, plus précisément dans des langages de script. Les langages de script sont dans l’absolu plus simples à appréhender que des langages orientés objet tels que Java ou C++. De plus, les utilisateurs métier ont déjà l’habitude de traiter les données dans des langages de script comme VBA, Python ou R.
Grâce à Hadoop Streaming, l’utilisateur peut développer des fonctions Map et des fonctions Reduce de façon scripturale et l’utilitaire s’occupe de créer le job MapReduce, de le soumettre au cluster et de le suivre jusqu’à ce qu’il s’achève. Si vous êtes un professionnel qui veut monter en compétences sur Hadoop mais ne se sent pas l’âme d’un...
Conclusion
Hadoop est l’implémentation du modèle de calcul MapReduce de Google et de son système de fichiers, le HDFS. Techniquement, Hadoop est un ensemble de classes Java qui permettent de faire du traitement massivement parallèle de façon complètement tolérante aux pannes. Hadoop rend les traitements tolérants aux pannes grâce à ses deux propriétés que sont la conscience de casiers et la localisation des traitements. Par ailleurs, Hadoop est capable de gérer les défaillances : panne du nœud de référence, panne des nœuds de données et retardataires. Hadoop a donné naissance à un large éventail de projets tout autour de lui qui facilitent son adoption. Cet écosystème de projets est aujourd’hui catalogué sous le nom d’écosystème Hadoop. À ce stade d’étude, vous savez écrire des fonctions MapReduce, vous avez une connaissance claire de toute la partie de traitement Hadoop. Vous n’êtes pas un développeur Java ? Ce n’est pas grave, Hadoop a prévu pour vous l’utilitaire Hadoop Streaming, qui permet d’exécuter des scripts MapReduce rédigés dans des langages plus simples tels que Python, R ou Ruby. Dans le chapitre suivant, nous allons nous intéresser au stockage des données...
Guide d’étude du chapitre
Question 1 : Quelle définition donneriez-vous à Hadoop ?
Question 2 : Quelle différence faites-vous entre le MapReduce et Hadoop ?
Question 3 : Citez les deux propriétés qui garantissent la performance d’un cluster Hadoop.
Question 4 : Qu’est-ce qu’un système in situ ?
Question 5 : Les architectures délocalisées sont des systèmes ex situ, c’est-à-dire qu’elles déplacent les données vers les requêtes. Une telle approche est-elle envisageable avec un cluster Hadoop ? Justifiez votre réponse.
Question 6 : Qu’est-ce qu’un job MapReduce ?
Question 7 : Quelle est la différence entre le jobtracker, le nœud de référence et le processus master ?
Question 8 : Quelle est la différence entre le tasktracker, le nœud de données et le worker ?
Question 9 : À quoi correspond le facteur de réplication dans un cluster Hadoop ?
Question 10 : Par défaut, combien de nœuds de données sont utilisés pour un job MapReduce complet ? Justifiez votre réponse.
Question 11 : Un job MapReduce se décompose en sept tâches, mentionnés ci-après. Déterminez l’ordre d’exécution de ces tâches...
À retenir
-
Hadoop est une implémentation du modèle de calcul MapReduce de Google et de son système de fichiers distribué GFS.
-
Hadoop est un ensemble de classes écrites en Java pour la programmation des tâches MapReduce et HDFS. Ces classes permettent à l’analyste d’écrire des fonctions MapReduce et de les exécuter sans savoir comment ces fonctions sont distribuées et parallélisées dans le cluster.
-
Dans la terminologie Hadoop, un job MapReduce est une unité de travail que l’utilisateur veut exécuter. Il consiste en trois choses : le fichier des données à traiter (input file), le programme MapReduce et les informations de configuration (métadonnées);
-
Deux types de processus contrôlent l’exécution d’un job MapReduce dans le cluster : le jobtracker et les tasktrackers.
-
Le jobtracker est le processus central qui est démarré sur le nœud de référence, il coordonne tous les jobs qui s’exécutent sur le cluster, gère les ressources du cluster et planifie les tâches à exécuter sur les tasktrackers;
-
Les tasktrackers sont les processus qui traitent le programme MapReduce de l’analyste, ils sont démarrés au niveau des nœuds de données et exécutent soit les tâches Map, soit les tâches Reduce...