Table des matières

Présentation de Hadoop

Qu’est-ce qu’Hadoop ?

Hadoop est un framework 100% open source, écrit en Java et géré par la fondation Apache. Il a été conçu pour répondre aux besoins du Big Data, tant au plan technique qu’économique. Hadoop est capable de stocker et traiter de manière efficace un grand nombre de donnés, en reliant plusieurs serveurs banalisés entre eux pour travailler en parallèle.

Hadoop offre une grande flexibilité. Ses performances évoluent de manière quasi linéaire en fonction du nombre de machines constituant le cluster. Plus le nombre de nœuds est élevé, plus le temps d’exécution des jobs est court!

Hadoop fonctionne sur le principe des grilles de calcul consistant à répartir l’exécution d’un traitement intensif de données sur plusieurs nœuds ou grappes de serveurs.

Java est le langage de préférence pour écrire des programmes Hadoop natifs. Néanmoins, il est possible d’utiliser python, bash, ruby, perl …

Le nom « Hadoop » était initialement celui d’un éléphant en peluche, jouet préféré du fils de Doug Cutting.

En quoi Hadoop est-il différent des anciennes techniques ?

Économique : Hadoop permet aux entreprises de libérer toute la valeur de leurs données en utilisant des serveurs peu onéreux.

Flexible : Hadoop permet de stocker de manière extensible tous types de données. Les données peuvent être non structurées et ne suivre aucun schéma structurées (PDF, MP3, base de données, etc.) grâce à son système de fichier HDFS « Hadoop Distributed File System ». Les utilisateurs peuvent transférer leurs données vers Hadoop sans avoir besoin de les reformater.

Tolère les pannes: les données sont répliquées à travers le cluster afin qu’elles soient facilement récupérables suite à une défaillance du disque, du nœud ou du bloc. Etc,…

SGBD vs Hadoop

Les systèmes de gestion de bases de données (SGBD) traditionnels sont conçus pour fonctionner en mode transactionnel, ils ne sont en aucun cas capables, techniquement et/ou financièrement, de traiter de manière séquentielle des volumes de données se chiffrant au minimum en dizaines ou centaines de To.

Les distributions de Hadoop

Il existe plusieurs distributions de Hadoop, dont les plus connues sont celles de Cloudera, Hortonworks et MapR. Bien que dans le même temps, d’autres distributions Hadoop voient aussi le jour. Par exemple, il y a Pivotal HD de EMC Corporation ou IBM InfoSphere BigInSights.

Avec Amazon Elastic MapReduce (EMR), Amazon offre même une solution hébergée, pré configurée dans son cloud.

Ces distributions comprennent des produits gratuits, qui offrent les fonctionnalités de base de Hadoop, et des options ou produits payants, qui offrent des fonctionnalités avancées.

Qui utilise déjà Hadoop ?

Hadoop est utilisé par des entreprises ayant de très fortes volumétries de données à traiter. Parmi elles, on trouve notamment des géants du web comme Facebook, Twitter, LinkedIn, ou encore les géants de l’e-commerce à l’instar de eBay et Amazon.

Vous trouverez sur cette page, la liste des entreprises et institutions publiques qui utilisent Hadoop

Quels sont les domaines d’application d’Hadoop ?

Toutes les sociétés et tous les secteurs d’activités sont concernés : la vente/commerce, distribution, transports, les administrations et le secteur public, les domaines scientifiques et médicaux, la banque/assurance, les télécoms, les usines de production.

Dans le domaine de la gestion de clientèle (Anticipation des désabonnements) Dans le domaine de la publicité (Ciblage de la clientèle) Dans le domaine de la lutte contre la fraude Etc,…

Les modes de fonctionnement de Hadoop

Les modes de fonctionnement de Hadoop sont en nombre de trois :

  1. Le mode local (local mode) ;
  2. Le mode pseudo-distribué (pseudo-distributed mode) ;
  3. Le mode totalement distribué (fully-distributed mode).

Le mode local

En mode local, Hadoop fonctionne sur une seule station de travail et les 5 daemons de Hadoop (NameNode, SecondaryNameNode, DataNode, JobTracker et TaskTracker) s’exécutent tous dans la même JVM.

De plus, le système de fichier utilisé est celui du système d’exploitation et non HDFS. Le mode local mode est rarement utilisé, sauf pour tester Hadoop pour la première fois ou déboguer un programme.

Le mode pseudo-distribué

En mode pseudo-distribué, Hadoop fonctionne sur une seule station de travail, mais chacun des 5 daemons s’exécute dans sa propre JVM ainsi que le système de fichier utilisé est HDFS.

Le mode pseudo-distribué est souvent utilisé par les développeurs Hadoop, parce qu’il développe et teste des jobs simulant un vrai cluster Hadoop.

Le mode totalement distribué

Le mode totalement distribué correspond au fonctionnement d’un vrai cluster Hadoop, avec plusieurs stations de travail interconnectées en réseau.

Chacun des 5 daemons s’exécute dans sa propre JVM ainsi que le système de fichier utilisé HDFS.

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 clair :

Systèmes d'exploitation

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êmes 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ées en temps réel. (requiert l’installation de spark, voir plus loin)

Kafka : Système distribué de messagerie pour l’agrégation de logs, le traitement en temps réel et le monitoring. Développé par linkedin et écrit en scala.

Flink : Il fournit un framework de traitement 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.

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 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écuté, 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.