Emmanuel Bastien (@ebastien) travaille chez Amadeus. Apache Hadoop est un framework Map-Reduce Java, qui permet de processe de gros volumes de données. Prenez la taille des disques modernes qui sont énormes, le souci qui nous attend est bien le traitement des volumes de données. Plusieurs serveurs, plusieurs machines, finalement ne serait-il pas plus simple de faire venir l’algorithme de traitement vers la donnée, plutôt que de chercher à traiter à un seul endroit les données ? Le réseau est un goulot d’étranglement.
Emmanuel démarre avec l’exemple d’un indexer de fréquences d’apparition des mots. Quelques lignes unix avec des pipes, finalement on peut par analogie expliquer le fonctionnement de Map et Reduce en quelques lignes.
Une fonction de Map prend en entrée une partie des données, et en sortie retourne une collection de paires clé-valeur. La tâche Reduce va prendre en entrée toutes les valeurs pour une clé et va retourner le résultat final.
La tâche Map doit pouvoir s’exécuter en parrallèle en étant capable de traiter de manière indépendante les données. La tâche Reduce doit agréger les données d’une seule clé. Cela permet de distribuer le traitement.
En pratique, la distribution est est effectuée via HDFS, le file-system partagé d’Hadoop. Un fichier est découpé en bloc de taille fixe de 64Mo. HDFS est donc efficace avec des gros fichiers de données. Chaque bloc de votre fichier est alors alloué sur un data node. Le Name node sert à reconstruire l’ensemble du fichier. Mais attention, HDFS est un système distribué qui cependant ne fait pas de la haute disponibilité. En effet, ce Name Node est un SPOF (Single Point Of Failure).
Concernant la gestion des Jobs, JobTracker et Task Tracker permettent de synchroniser les traitements.
L’API Java d’Hadoop est en Java. Ecrire finalement pour Hadoop est simple. Vous implémentez une class avec l’interface Mapper, une autre classe avec l’interface Reduce, vous construisez un JAR et Hadoop se chargera ensuite de distribuer votre algo sur le cluster.
Vous pouvez aussi faire du streaming avec un binaire pour la partie map, un binaire pour la partie reduce et simplement la définition des entrées et des sorties. Pratique pour tester, mais les performances sont moins bonnes que l’API native Java.
Apache Hive est un langage pseudo-SQL pour générer des jobs Hadoop. Un autre projet, Apache Pig venu de Yahoo! Emmanuel présente ensuite un exemple en Ruby avec Cascading/JRuby. Plus verbeux que Pig, il utilise le même exemple afin de nous montrer les différents types de DSL existants.
Pour terminer nous avons vu une démonstration avec Cloudera. Cette société propose un support et des outils professionnels pour Apache Hadoop.
D’autres services comme Amazon Elastic MapReduce et bientôt le support d’Hadoop sur Microsoft Windows Azure. Le framework est utilisable sur Amazon WS très facilement.
Pour tester Hadoop vous pouvez récupérer une VM sur le site de Cloudera avec l’ensemble des outils d’Hadoop. Pratique si vous voulez simplement regarder.
Tout est sur http://www.cloudera.com
Une présentation simple et intéressante sur Hadoop.