Vous avez dit Hadoop ? – 2nde partie

Dans la première partie de ce billet, nous avons introduit les origines d’Hadoop et présenté deux premières briques, en l’occurrence :

  • HDFS ou la couche de stockage;
  • Map/Reduce ou la couche de traitement des données.

Dans une seconde et dernière partie, nous nous intéressons à la notion d’ordonnanceur ainsi qu’aux différentes abstractions proposées par l’écosystème Hadoop.

Troisième brique : l’ordonnanceur

L’avantage du modèle au global est qu’il présente d’excellentes performances pour des « jobs » sur des volumes de données en « batch » et Map/Reduce est idéal pour un système de stockage comme HDFS.

Cependant, dans la pratique, la mise en œuvre de ce que nous avons vu juste avant suppose un ordonnanceur ou « scheduler ». En effet, la création/allocation de nouvelles tâches, leur gestion, le fait de synchroniser les processus entre eux, etc. ne se fait pas tout seul et suppose la présence d’un moteur complet qui gère cela au sein d’Hadoop.

Oozie est un ordonnanceur de flux de travail (workflow) pour la gestion d'un graphe acyclique dirigé d’actions, où des actions peuvent être des « jobs » Map/Reduce mais aussi d'autres « jobs » qui reviennent à cela au final comme par exemple avec Hive et Pig. Vous trouverez plus de détails dans le guide de démarrage ici.

Les versions futures d’Hadoop introduiront vraisemblablement des évolutions dans ce domaine à l’image des travaux courants sur YARN (pour Yet Another Resource Negotiator). Vous trouverez une description des principes de son fonctionnement ici.

A ce jour, l’« inconvénient » du Framework Hadoop est que celui-ci demeure fortement couplé à Map/Reduce et n’est pas (encore) adapté à la résolution de certains problèmes liés aux Big Data comme évoqués en introduction de ce billet. (Ce ne sera peut-être plus le cas demain).

Comme l’illustre ce billet, Hadoop est un excellent outil pour travailler sur le Volume, selon le principe des 3V des big Data (Cf. Gartner Says Solving 'Big Data' Challenge Involves More Than Just Managing Volumes of Data). Pour d’autres aspects comme la Vitesse, des technologies comme Microsoft StreamInsight de traitement de flux à haut débit ou Storm s’avèrent mieux adaptés. Nous aurons l’occasion d’y revenir prochainement.

C’est pourquoi le groupe de projet d’Apache en charge du développement d’Hadoop travaille actuellement pour ce découplage et l’ajout de nouveaux paradigmes comme MPI mais ceci est une autre histoire ;)

Quatrième brique : Les abstractions

Depuis l’arrivée du projet principal Hadoop à maturation, plusieurs outils se sont construits sur le moteur d’exécution pour simplifier le développement d’applications. En effet, Hadoop dans son package de base demande que le développeur soit initié au fonctionnement Map/Reduce et qu’il comprenne les bases de la programmation fonctionnelle.

Hive

Hive est un logiciel d'analyse de données permettant d'utiliser Hadoop avec une syntaxe proche du SQL appelée HiveQL et ce, via un mécanisme permettant de définir un schéma lors de la lecture des données. Il permet d’exprimer des requêtes à la SQL qui se compilent en un ensemble de programmes Map/Reduce optimisés, des implémentations en Java du Mapper et du Reducer comme nous l’avons fait. Il propose pour cela un support pour la plupart des constructions auxquelles on peut s’attendre dans SQL (agrégation, regroupements, filtrage, etc.). Il est toutefois possible de soumettre ses propres classes d’implémentation si nécessaire.

Nous aurons l’occasion d’en parler dans un prochain billet lorsque nous découvrirons Windows Azure HDInsight (ou Hadoop on Windows Azure).

Pig

Pig possède lui aussi son propre langage (Pig Latin), mais son approche est différente. Pour faire simple, il est plus facile d’utiliser un langage d’abstraction proche du « pseudo code » pour se focaliser sur la sémantique puis de laisser un compilateur optimiser votre code pour une approche Map/Reduce.

L’avantage de Pig réside dans la simplicité de l’expression d’une suite logique de tâches Map/Reduce sur les données :

A = LOAD 'data' AS (a, b, c).

B = FOREACH A GENERATE a, null;

Le principal inconvénient est qu’il faut apprendre du coup la syntaxe associée. Ceci étant dit, il est difficile de programmer une application avec Map/Reduce et bien souvent, cette dernière n’est pas bien optimisée. La compilation de celle-ci avec Pig donne des performances excellentes que très peu de développeurs arrivent à surpasser.

Il existe beaucoup d’autres projets sur Hadoop dû au potentiel de la plateforme comme notamment :

  • Mahout qui apporte des capacités de « Machine Learning » avec des algorithmes sur étagère.
  • Sqoop qui se charge du transfert de données contenues dans des bases de données SQL vers HDFS et inversement.
  • Etc.

Vous trouverez sur le site officiel Apache Hadoop la liste des projets Apache dans la rubrique Related Projects.

Hadoop Streaming

Pour finir, dans l’installation d’Hadoop, on retrouve une bibliothèque appelée Hadoop Streaming. Cette dernière sert à programmer une application Map/Reduce dans n’importe quel langage de programmation (Python, C#, C++, PHP, etc…). Cette bibliothèque de classes Java écoute pour cela la sortie standard (stdout).

Le principe est le suivant :

Il suffit d’émettre dans celle-ci - avec par un cout en C++ ou un Console.WriteLine() en C# – la clé et la valeur pour la méthode map() puis de récupérer l’entrée – via un cin en C++ ou un Console.ReadLine() en C# – dans la méthode reduce().

Naturellement, écrire puis parser la sortie standard a un coût sur les performances globales d’une application. En dépit de cela, l’approche reste quand même très pratique.

L’article Hadoop on Azure C# Streaming Sample Tutorial propose un tutoriel complet exposant la méthode pour programmer en C # avec le streaming. Vous pouvez également vous appuyer sur la documentation officielle.

Pour aller plus loin

Malgré sa longueur et ses deux parties (pour l’atténuer), ce billet ne fait qu’effleurer Hadoop.

Pour aller plus loin, vous pouvez consulter :

  • L’un des premiers tutoriels sur Hadoop, très complet, réalisé par l’équipe Yahoo,
  • La documentation officielle du projet Hadoop,
  • Le Wiki associé où vous trouverez tout le nécessaire,
  • Etc.

Les ressources ne manquent pas !

Il convient d’évoquer également à ce propos l’excellent ouvrage Hadoop: The Definitive Guide, 3rd Edition - Storage and Analysis at Internet Scale que beaucoup considèrent à juste titre comme LA référence.

clip_image002

Nous espérons en tout cas que ce billet aura su répondre à certaines de vos questions et vous aura donné l’envie d’aller plus loin avec Hadoop :)