L’écosystème Hadoop

Un écosystème complexe 

Quand on se penche pour la première fois sur hadoop on se rend vite compte qu’il existe une multitude de solutions qui gravitent autour et qui rendent cet écosystème complexe au premier abord. L’objectif du schéma et des explications qui suivent, est de donner une vision macro et non-exhaustive des principaux projets, afin que vous puissiez y voir plus claire :

Hadoop

Systèmes d’exploitation, (Operating System (OS))

Nativement hadoop est compatible Linux. Ce n’est que depuis la version hadoop 2.0 que l’on peut l’installer sur windows.

Stockage des données
  • HDFS (Hadoop Distributed File System) : C’est le Système de stockage de fichiers  distribué de Hadoop. Il permet de stocker au format natif n’importe quel objets (image, vidéo, fichiers  texte etc…) en faisant porter la charge sur plusieurs serveurs.
  • HBASE : Base NoSQL orientée colonnes. Le stockage à proprement parler reste du HDFS mais hbase apporte une surcouche de stockage qui permet de bénéficier des avantages des bases orientées colonnes, à savoir les colonnes dynamiques (deux individus d’une même table n’ont pas forcément les même colonnes, les valeurs null ne sont pas stockées) et l’historisation à la valeur et non-plus à la ligne (suppression des doublons, quand une valeur change seule la valeur concernée est historisée et non toute la ligne).
  • Metastore de HIVE : Le metastore de Hive apporte le côté base de données relationnelle dans Hadoop. Il permet de stocker la structure des tables et des bases de données créées via hive ou un autre framework SQL (impala, spark etc…..). Les données restent stockées en hdfs mais le metastore apporte une surcouche qui permet de connaître leurs structures et de retrouver cette notion de ‘tables’ connu en décisionnel et d’utiliser le SQL.
Gestionnaires de ressources
  • Yarn (Yet Another Resource Negotiator) :  Il s’occupe de la gestion et de l’allocation des ressources (CPU, Ram etc..) aux différentes applications (mapreduce, spark, impala etc…) lancées sur le cluster.
  • Mesos : Projet Apache plus récent que Yarn, c’est aussi un système de gestion de ressource de clusters. Il va permettre de gérer et de partager de manière fine, souple et dynamique des ressources entre différents clusters, pour diverses applications.
Récupération des données
  • Apache Flume : C’est un système distribué permettant de récupérer des logs de plusieurs sources, de les agréger et de les pousser dans HDFS. Il est fiable, flexible, assez intuitif et porté par toutes les distributions Hadoop.
  • Apache Storm : Système distribué qui permet la récupération et le traitement en temps réel, il ajoute des capacités de traitements de données à Hadoop.
  • Spark Streaming : Librairie de spark permettant la récupération et le traitement de donnée en temps réel. (requiert l’installation de spark, voir plus loin)
  • Kafka : Système distribué de messagerie pour l’agrégation de log, le traitement en temps réel et le monitoring. Développé par linkedin et écrit en scala.
  • Flink : Il fournit un framework de traitements distribué en mémoire. Très similaire à spark sauf que son coeur est en java (vs scala) et qu’il a été conçu nativement pour le temps réel.
  • Apache Sqoop : Ce projet permet de faire le lien entre un système de gestion de base de données relationnel (SGBDR) et HDFS.
Moteurs d’interrogation et de manipulation des données 
  • MapReduce : Framework open source java, permettant la manipulation des données dans un environnement distribué. Il est composé de deux étapes principales.
    • L’étape de map qui va permettre d’effectuer des actions là ou sont stockées les données et fournir en sortie une liste de clés valeurs.
    • L’étape de reduce qui va regrouper les résultats des map en fonctions de clés et effectuer les actions  finales ( les actions sur les valeurs?).

Les étapes de map et de reduce lisent  les données et écrivent leurs résultats sur disque , cela rend le processus stable mais lent.

  • Impala : Moteur SQL distribué mis en place et proposé par Cloudera. Il s’appuie sur le metastore de hive pour connaître le format des données. Il va 20 fois plus que vite que MapReduce mais n’est pour l’instant qu’un complément car il n’offre pas encore toutes les fonctionnalités de mapreduce (sérialisation notamment)
  • Apache Drill : Moteur SQL open source développé initialement par MapR  et maintenant porté par la fondation Apache permettant d’explorer les données stockées dans un cluster Hadoop ou dans des bases NoSQL. Apache Drill permet d’exécuter des requêtes sans avoir à définir un schéma de données, ce qui offre une grande flexibilité aux utilisateurs.
  • Apache Tez : Moteur SQL distribué initié par Hortonworks qui vise à remplacer mapreduce notamment au niveau de Hive.
  • Spark : Projet  permettant la manipulation des données dans un environnement distribué. Il peut aussi bien faire les traitements sur disque ou tout en mémoire. Il va 10 fois plus vite que mapreduce sur disque et 100 fois plus vite en mémoire. Il est enrichi de librairies notamment MLiB qui contient des algorithmes parallélisés de machine learning, GraphX pour les algorithmes de graphes, SparkSQL pour notamment se connecter au metastore de Hive. Spark peut se plugger sur la majorité des systèmes distribués (NoSQL, Hadoop, MPP …). Il peut fonctionner en mode standalone ou être géré par un gestionnaire de ressources tel que Yarn ou Mesos. Il permet nativement de coder en scala, java ou python.
  • Hive : Hive est donc composé d’un metastore et d’un driver. Ce dernier va permettre de prendre en entrée du SQL et de générer du map reduce pour manipuler des données dont on connaît la structure.
  • Pig : Moteur permettant de manipuler tous types de données avec un langage beaucoup plus intuitif que le java mapreduce. Il est beaucoup utilisé pour tous les process ETL (extraction transformation de données), il permet d’aller plus loin que le SQL. Une fois exécuter le code Pig génère du mapreduce.
  • Mahout : Librairie java contenant des algorithmes de machine learning déjà codé en map reduce. Son développement est ralenti au profit de la librairie Mlib de Spark
Ordonnanceurs
  • Oozie : Il permet d’ordonnancer et de lancer tous types d’applications (spark, impala, shell, hive, pig ….) dans l’écosystème Hadoop.
  • Airflow : Outil open source développé par airbnb qui permet d’ordonnancer des jobs shell en intégrant nativement la notion de flux.
  • Jenkins :  Permet d’ordonnancer et de scheduler des job shell
Interfaces et coordinations
  • Zookeeper : Zookeeper permet de mettre en œuvre la coordination des services de l’écosystème et leur synchronisation dans un environnement distribué. Seul les administrateurs peuvent être amené à interagir avec lui.
  • Hue : Interface web qui permet d’accéder directement aux principaux modules (hive, pig, sqoop, spark, impala, etc……). Nativement on peut accéder aux modules en ligne de commandes. Hue apporte une interface commune et agréable d’utilisation.
Conclusion

Ils existent de nombreux autres modules mais nous espérons que cet article vous aura aidé à mieux comprendre ce qu’englobe ‘l’écosystème hadoop’. Des articles dédiés à certains des modules cités tel que spark seront publiés par la suite.

Pour aller plus loin :

Flink et Spark : http://ippon.developpez.com/tutoriels/big-data/apache-flink-park/redondance/

Kafka : http://fr.slideshare.net/carolineboison/apache-kafka-40973171

Spark : http://spark.apache.org/docs/latest/

GrapX: https://spark.apache.org/docs/0.9.0/graphx-programming-guide.html

Mllib : https://spark.apache.org/docs/1.1.0/mllib-guide.html

Impala : http://impala.incubator.apache.org/

drill : https://drill.apache.org/

Tez : https://tez.apache.org/

Hive : https://hive.apache.org/

Pig : https://pig.apache.org/

Mahout : http://mahout.apache.org/

Jenkins : https://wiki.jenkins-ci.org/display/JENKINS/Schedule+Build+Plugin

Airflow : https://airflow.incubator.apache.org/

Ooozie : http://oozie.apache.org/

Article écrit par Anne-Sophie LAUGIER et Louis-Baptiste FRANCE

Laisser un commentaire