Getting Started with Hadoop : Part 2

Disclaimer : Ce billet est la deuxième partie d’un article écrit pour la revue Programmez  (n°144) et traite de la technologie Hadoop. Si vous avez manqué la première partie, la voici. J’en profite également pour citer un article de businessinsider qui vous donnera peut être envie découvrir cette techno :  les startups qui emploient les ex-Yahoo, ex-Facebook et ex-Google. Et l’article est parfaitement dans l’actualité avec la release de la version 1.0.0 !

Exemple
Prenons un exemple pratique : vous voulez trier une pile de pizzas, chaque pizza ayant un parfum (4 fromages, margarita…) et une forme (ronde, carrée, triangle..). Pour cela vous avez à votre disposition 3 serveurs (3 noeuds dans votre cluster). Quelles vont être les phases map et reduce ?
La phase map va consister à répartir les pizzas selon leur forme. Chaque serveur va recevoir une pile de pizzas à traiter et pour chaque pizza va écrire un couple (clé, valeur) de sortie composé de la forme de la pizza et de la pizza.
(ronde, pizza1), (ronde, pizza2), (carrée, pizza3) …

Une fois toutes les pizzas traitées par les serveurs, on se retrouve avec une liste de couple (clé, valeur) avec les clés représentant les formes de pizza. Hadoop va alors redistribuer cet ensemble de données sur nos 3 serveurs en envoyant les pizzas carrées sur le premier, les rondes sur le second etc… Éventuellement, si les pizzas carrées sont trop nombreuses pour être traitées sur un seul serveur, elles seront envoyées en partie sur le serveur un et en partie sur le serveur deux.

Chaque reducer va alors donner un couple (clé, valeur) en sortie indiquant le nombre de chaque saveur pour les clés qu’il a reçues. On crée ici une nouvelle clé composée de la forme et de la saveur.
(carrée_4fromages, 234), (ronde_margarita, 128), (triangle_margarita,6) …

Cet exemple est un cas d’école, et même si vous allez rarement trier des pizzas, vous pouvez chaîner plusieurs mappers et/ou reducers pour arriver à vos fins sur des opérations plus compliquées.

Parmi les exemples notables d’utilisation, nous avons bien sûr Twitter, Google ou Facebook qui s’en servent massivement pour toutes les opérations d’indexation, de traitement de leurs logs serveur (avec plusieurs teraoctets traités chaque jour) ou encore les prédictions de tendances. Mais on retrouve aussi Hadoop chez des opérateurs de téléphonie mobile (test de nouveaux forfaits sur de vastes volumes de données), ou dans des banques pour des calculs de prime, ou pour des calculs de facturation complexes mais ponctuels. Ou encore dans l’industrie pour les suivis RFID qui peuvent générer des quantités incroyables de données.

Un dernier exemple intéressant est celui du New York Times. Afin de générer plusieurs teraoctets de PDFs à partir de leurs archives et de les ouvrir au public, leur équipe a implémenté un programme map/reduce pour réaliser efficacement cette tâche. Et plutôt que d’acheter de nouvelles machines qui ne leur serviraient plus par la suite, elle s’est appuyée sur des instances Amazon : 100 instances, pendant 24h pour un coût en infrastructure dérisoire de 240$. Résultat : 1.5 To de PDF générés dans la journée, avec le résultat hébergé dans le stockage S3 (Simple Stockage Service, service de stockage dans le cloud de la société Amazon) et prêt à être utilisé.

HDFS
Hadoop n’est pas seulement le framework qui vous permet d’écrire des programmes distribués en vous simplifiant la tâche, il met aussi a disposition un système de fichier pensé pour ce type de traitement. Dans un cluster Hadoop, les données sont réparties entre les différents noeuds du cluster. Chaque bloc de données est même répliqué sur plusieurs noeuds pour éviter toute perte (la valeur par défaut de cette redondance est de 3, la donnée se trouvera donc sur 3 noeuds distincts de votre cluster).

Pour répartir ces données de façon performante, un système de fichier distribué a été créé : Hadoop Distributed File System (HDFS) inspiré là aussi de Google et de son Google File System. Ce système de fichier est écrit en Java et vous assure un système de fichier portable. Même si les données sont réparties, elles sont accessibles par n’importe quel noeud lors du traitement (et sont alors transférées si nécessaires depuis leur noeud de stockage vers le noeud affecté au traitement). Ce système de fichier est également capable de monitorer les noeuds, de répliquer et de répartir les données en cas de perte de serveur. Chaque noeud de votre cluster est, en régle générale, également un noeud de stockage.

Lorsque l’on veut traiter un ensemble de données (par exemple un fichier XML de plusieurs centaines de Mo), on va d’abord monter ces données sur le système de fichier HDFS. Pour cela Hadoop fournit un ensemble de commandes très proches de celles que l’on trouve dans l’univers Unix : ls pour lister, put pour ajouter, rm pour supprimer, cat pour lire… Une fois les données montées, on peut démarrer le traitement ; HDFS va alors diviser chaque fichier d’entrée en bloc de données (par défaut de 64Mb) et l’envoyer à un noeud pour calcul, en privilégiant bien sûr les blocs présents physiquement sur le serveur. L’idée est plutôt de déplacer les traitements vers les données que l’inverse, ce qui est beaucoup moins coûteux en performance et en bande passante.

Ecosystème
Hadoop a aussi un très riche écosystème d’outils qui répondent à des besoins différents.

  • Apache Pig est un langage de requête pour analyser un vaste ensemble de données, né chez Yahoo. C’est une abstraction comme peut l’être SQL pour écrire des requêtes qui sont alors traduites en job Map/Reduce et exécutées de façon distribuée sur le cluster. Cela peut simplifier considérablement l’écriture d’une requête !
  • Apache Hive : un data warehouse libre implémentant un langage de requête orienté SQL (HiveSQL) dont la mise en œuvre se traduit par l’exécution de jobs Map/Reduce orchestrés par Hadoop.
  • Sqoop va, lui, vous permettre d’importer vos données stockées dans une base SQL dans HDFS. Le nom vient d’ailleurs de la contraction SQL-to-Hadoop. Il peut également importer les données dans Hive.
  • Flume permet également de collecter des données, mais plutôt des logs.
  • Apache HBase est une base de données orientée colonne s’inscrivant dans la mouvance NoSQL dont le design s’inspire de BigTable (Google). Elle supporte jusqu’à plusieurs millions de lignes et fonctionne au dessus de HDFS.
  • Oozie est un moteur de workflow pour orchestrer vos programme Map/Reduce ou vos scripts Pig.
  • Hue (Hadoop User Experience) est une interface graphique web qui permet d’administrer Hadoop, de parcourir votre répertoire HDFS, de voir les programmes en cours d’exécution etc…


Bref, beaucoup d’utilitaires sont là pour vous aider !

Comment démarrer simplement ?
Une société s’est spécialisée dans le support d’Hadoop auprès des entreprises : il s’agit de la société Cloudera, qui compte dans ses rangs nombre de commiters du projet, dont Doug Cutting. Cloudera fournit un ensemble de ressources très utiles pour aller plus loin, des vidéos mais aussi une machine virtuelle Ubuntu avec tous les outils précités d’ores et déjà installés et configurés. C’est donc un moyen simple de tester ce que peut vous offrir Hadoop. Le framework est d’ailleurs fourni avec quelques exemples de programmes sous forme de jar, que vous pouvez lancer dans la VM. Le navigateur installé vous permettra de monitorer l’avancement de votre programme lors de son exécution.

Hadoop est donc un outil à connaître et qui vous sera peut être utile dès demain. Il ouvre des perspectives intéressantes sur la façon de traiter vos données et n’est pas seulement réservé aux ‘big players’ du web. Si votre application produit trop de données pour que les outils classiques puissent les traiter, ou que ceux-ci les traitent trop lentement, ou de façon trop coûteuse, pensez Hadoop ! Son implémentation du pattern Map/Reduce vous permettra de découvrir en douceur les joies de la scalabilité, et son formidable éco-système, à peine abordé ici, vous ouvrira un univers sans limite. Et quand on voit le nombre de startups qui se lancent sur cette techno, on se dit que Hadoop, c’est définitivement hype!

À propos de Cédric Exbrayat

Cédric Exbrayat, développeur et fondateur Ninja Squad, se réunit avec ses semblables régulièrement que ce soit au Lyon JUG ou à Mix-it, dont il est le fondateur. Java et JS for food and fun.

Publié le 29/12/2011, dans Getting started, et tagué , , . Bookmarquez ce permalien. 2 Commentaires.

  1. Anne O'nime

    Bon article!

    A noter cependant que sqoop, flume et oozie ont rejoint l’incubateur de la fondation Apache. Leurs URL et mode de developpement a donc change.

    D’autres projets interessant dans l’ecosysteme d’apache hadoop:
    * mahout: bibliotheque d’apprentissage automatique qui se concentre principalement sur les algorithmes liés aux recommandations, groupements et classification
    * zookeeper: une plate‐forme permettant de développer rapidement des services distribués fiables
    * bigtop: Creation d’une distribution (paquets pour votre distribution GNU/Linux favorite) et de tests d’integration autour de tout cet ecosysteme. A meme des recettes pour puppet afin de faciliter le deploiement
    * whirr: un ensemble d’outils et bibliothèques permettant de créer des grappes de serveurs Hadoop via divers fournisseurs d’infrastructure virtuelle 
    * gora: Une bibliotheque permettant de s’abstraire des bases nosql
    * accumulo: Autre base nosql similaire a HBase

  1. Pingback: Un an de hype! « Hype Driven Development

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :