[Big Data] Hadoop/HDInsight : concepts généraux

Ce billet aborde les Big Data, avec un focus sur HDInsight, la distribution Hadoop de Microsoft.

Concepts généraux sur les Big Data

    Pourquoi le Big Data ?

Les données, comme nous le savons, sont généralement structurées. C’est-à-dire, organisées et lisibles.

Toutefois, la majorité des données pertinentes sont stockées dans un contexte déstructuré, généralement dans des fichiers textes.

Le manque de structure a un rôle non-négligeable dans, non seulement la qualité de l’information traitée, mais également les temps de traitement. Ces données sont, de nos jours, tellement larges et exogènes qu’il est difficile de les traiter via un outil « tout-en-un », ou des applications transactionnelles classiques.

De plus, ces types de données sont non seulement exogènes, mais aussi souvent générées de façon continue. Le meilleur exemple étant les échanges dans les réseaux sociaux, ou encore, les informations de trading en temps-réel.

Avec l’explosion du niveau de volumétrie des données, les accès à celles-ci sont de plus en plus lents. En effet, par exemple, lire un téraoctet de données peut prendre plus de deux heures, les temps de transfert atteignant péniblement les 100 Mo/s, en moyenne.

C’est pour répondre à ces différentes problématiques liées à la volumétrie et la performance qu’une autre approche de traitement des données a commencé à être discutée dès les années 90 : amener les utilisateurs vers les données, plutôt que l’inverse. Techniquement, il s’agit de paralléliser l’accès des utilisateurs à plusieurs disques stockant, chacun, un certain volume de données, afin de réduire drastiquement les temps de lecture.

 

    Okay, mais qu’est-ce que « Big Data » ?

Le terme de « Big Data » est, en fait, un terme générique (et populaire) utilisé pour décrire la croissance exponentielle des données, et leur disponibilité. Qu’elles soient structurées ou non.

L’idée derrière est de permettre la capture et la gestion d’un gros volume de données exogènes ou endogènes, dans le but de les analyser afin de restituer, avec des performances au rendez-vous, celles significatives.

La quintessence du Big Data repose autour de la lettre V, qui fait référence à 4 mots-clés :

  • Volume : avec la croissance exponentielle – et perpétuelle – des données à stocker, il est de moins en moins inhabituel d’avoir des téraoctets, voire des pétaoctets de données à traiter.
  • Vélocité : il s’agit, grosso-modo, de la fréquence de génération, de capture et de partage des données. Fréquence qui, d’ailleurs, est de plus en plus élevée.
  • Variété : ce mot-clé fait référence au caractère hétérogène des données (données géospatiales, données textuelles, données multimédias, données cryptographiques,…).
  • Véracité : il s’agit du niveau de cohérence et de compréhension des données traitées.

Le Big Data permet donc à chaque organisation d’accéder à des données à partir de n’importe quelle source et de les analyser avec un bon niveau de performances.

Big Data vs données classiques

Le tableau ci-dessous offre quelques éléments comparatifs entre les Big Data et les données classiques :

Eléments de comparaison Big Data Données classiques
Type de volumétrie Pétaoctets Gigaoctets
Mode d’accès Batch. Applicatif ou batch.
Type de mises-à-jour Ecritures occasionnelles, lectures fréquentes. Lectures et écritures fréquentes.
Type de structure Schéma dynamique. Schéma statique.
Type de scalabilité Linéaire. Non-linéaire.
Niveau d’intégrité Relative. Elevé.

 

En résumé :


Les principaux challenges du Big Data

Le traitement continu d’un gros volume exponentiel de données à un haut niveau de performance génère son lot de challenges, pour le Big Data :

  • Qualité de l’information traitée : adoption de techniques de traitements optimaux permettant d’analyser (ou modéliser) et d’extraire des informations significatives et cohérentes.
  • Chargement de l’information : compte tenu la volumétrie très élevée des données à traiter, les opérations d’ETL (Extract, Transform, Load) peuvent s’avérer coûteuses.
  • Stockage : avec la nécessité de paralléliser les accès aux informations, un certain nombre d’unités de stockage surdimensionnées est nécessaire à utiliser, maintenir,…
  • Haute-disponibilité : afin de se prémunir contre d’éventuelles pertes de données, des solutions de réplication de données doivent être envisagées.

     

Cas d’utilisation concrets du Big Data

Pour avoir quelques exemples concrets d’utilisation d’une solution Big Data dans le monde réel, vous pouvez jeter un coup d’œil ici : http://hadoopilluminated.com/hadoop_book/Hadoop_Use_Cases.html.

 

Présentation générale de Hadoop et de ses modules

    Hadoop : késako ?

Hadoop est un projet open-source développé en Java par Apache (via Doug Cutting et son équipe) – inspiré par les travaux de Google autour de MapReduce, GoogleFS et BigTable – et axé autour du traitement parallèle d’un large contingent de données à travers différents clusters ou serveurs. Il a été conçu dans l’optique d’assurer une certaine scalabilité des données d’un simple serveur vers une bonne centaine de machines distribuées. Le tout, avec un (très) haut niveau de tolérance à la perte de données. En effet, Hadoop fonctionne en partant du postulat que non seulement les crashs matériels sont communs, ils doivent être gérés au niveau logiciel.

Pour en savoir plus, vous pouvez faire un tour ici : http://hadoop.apache.org/.

 

    Architecture générale de Hadoop

Hadoop possède divers modules (ou fonctionnalités) assurant son bon fonctionnement :

  • Un système de fichiers distribué basé sur GoogleFS : HDFS (Hadoop Distributed File System).
  • Un moteur MapReduce, pour les traitements parallèles des données.
  • Une plateforme centrale de gestion de ressources appelée YARN (Yet Another Resource Negociator), et permettant d’assurer la consistance et la sécurité des traitements des données à travers des clusters Hadoop.
  • Une base de données orientée colonnes, pour le stockage : HBase (pour Hadoop Base).
  • Un logiciel de gestion de configuration de Hadoop, et notamment de HBase : ZooKeeper (inspiré de Chubby, une création de Google).
  • Des logiciels d’analyse des données :
    • Hive (initialement implémenté par Facebook), et utiliant une syntaxe rappelant le langage SQL, et permettant de requêter des données Hadoop.
    • Pig (initialement développé par Yahoo!), basé sur le langage Pig Latin, et permettant notamment de créer des programmes MapReduce.

 

    Notion de HDFS

Comme vu dans la section précédente, HDFS (Hadoop Distributed File System, pour rappel) est le cœur de Hadoop. Il s’agit d’un système de gestion de fichiers distribué implémenté suivant les assertions suivantes :

  • Tout crash matériel est une norme, et non une exception.
  • Les traitements se font plus en mode batch qu’en mode intéractif (accès applicatif).
  • Les applications possèdent un très gros volume de données (un fichier HDFS typique quantifié en Go, To ou Po).
  • Une fois un fichier créé et ses données écrites, celles-ci n’ont pas besoin d’être changées.
  • Manipuler, déplacer des calculs est plus efficace que déplacer des données. L’idée est d’amener l’utilisateur vers les données plutôt que l’inverse.
  • Portabilité renforcée, d’une plateforme à l’autre.

Une architecture HDFS est composée de 2 types de composants (ou nœuds) importants :

  1. NameNode (nœud de noms) : il s’agit du type de nœud où les métadonnées du système de fichiers sont stockées. Ce type de nœud permet de déterminer, notamment, les correspondances entre les fichiers et les blocs de location, quels blocs de données sont stockés, et dans quel nœud de données.
  2. DataNode (nœud de données) :il s’agit du type de nœud où les données réelles sont stockées. Afin de notifier leur activité, chaque nœud de données envoie une notification système au nœud de noms toutes les 3 secondes. Chaque nœud de données peut communiquer avec un autre nœud de données, par exemple, pour rééquilibrer la quantité de données stockées, les répliquer,…

 


Les communications se font via la couche OSI TCP/IP, et le stockage des fichiers se fait à travers plusieurs machines distribuées. Les clients communiquent en utilisant le protocole RPC (Remote Procedure Call).

Au sein d’une architecture Hadoop, le NameNode est un single point of failure (SPOF, unique point de défaillance). C’est-à-dire qu’en cas de défaillance, c’est tout le fonctionnement de Hadoop qui n’est plus opérationnel. De ce fait, pour y faire, un deuxième NameNode a été implémenté au sein de l’architecture Hadoop de sorte que périodiquement, les métadonnées du NameNode principal soient copiées vers celui secondaire. Ainsi, en cas de défaillance du NameNode principal, le secondaire sera en mesure de prendre le relais avec des métadonnées suffisamment à jour.

Hadoop possède des gestionnaires de tâches :

  • Job Tracker, dont l’intérêt principal est la gestion de ressources (capture de la disponibilité des ressources, gestion du cycle de vie des tâches et de leur progression, gestion de la tolérance à la perte de données,…). C’est un service qui permet de distribuer des tâches MapReduce vers des nœuds spécifiques d’un cluster Hadoop.
  • Task Tracker, dont le rôle est de suivre les ordres donnés par le Job Tracker. Chaque Task Tracker possède un ensemble de slots, qui correspond au nombre de tâches qu’il peut accepter d’exécuter. Ainsi, de cette façon, chaque fois que le Job Tracker s’apprête à planifier une tâche, à travers des opérations MapReduce, il regarde d’abord.

 

Notion de MapReduce

Hadoop MapReduce est une plateforme permettant de faciliter le traitement d’une large quantité de données (> 1 To) en parallèle, à travers des clusters (>=100 nœuds). Elle permet également d’assurer la scalabilité des traitements des données sur des centaines de serveurs, au sein d’un cluster Hadoop.

Le terme « MapReduce » fait, en fait, référence à 2 tâches distinctes :

  • Une tâche Map, qui récupère un ensemble de données qu’elle convertit en un autre ensemble de données découpées (ou « splittées ») en plusieurs tuples, par paire clé/valeur.
  • Une tâche Reduce, qui récupère le résultat des opérations de la tâche Map et combine les tuples de données « mappées » pour former un ensemble de tuples plus petits.

Le schéma très simple ci-dessous résume le fonctionnement global d’une opération MapReduce (on suppose que l’on souhaite traiter des données textuelles) :


Comme on peut le constater ci-dessus, la phase Shuffle & Sort est le cœur des opérations MapReduce. Cette étape permet de garantir que chaque reducer soit en mesure de travailler avec des données triées (localement) par clé, après leur transfert (shuffling) par le mapper.

D’autres phases facultatives existent (Combiner, Partitioner).

Pour résumer, un fonctionnement typique des flux Hadoop utilisant MapReduce est le suivant :

  1. Un programme client soumet un job au JobTracker.
  2. Le JobTracker récupère les informations, à partir du NameNode, sur la position des données au sein des DataNodes.
  3. Le JobTracker place le programme client (en général, un fichier compressé JAR) dans un dossier partagé du HDFS.
  4. Le JobTracker assigne des tâches aux TaskTrackers sur les DataNodes où sont localisées les données à traiter.
  5. Le TaskTracker lance des tâches Map sur les DataNodes en récupérant le programme client à partir du dossier partagé sur le HDFS.
  6. Le TaskTracker informe le JobTracker de la progression de l’opération.
  7. Au terme du travail de la tâche Map, un fichier intermédiaire est créé au sein du HDFS du TaskTracker.
  8. Les résultats des opérations effectuées par la tâche Map sont passés à la tâche Reduce.
  9. La tâche Reduce traite toutes les données « mappées » et écrit le résultat final de ses opérations au HDFS.
  10. Sitôt la tâche Reduce terminée, le fichier intermédiaire généré par le TaskTracker est supprimé.

Une démonstration pratique de MapReduce et de ses fonctions (map, reduce,…) sera effectuée dans un billet dédié.

 

Introduction à HDInsight

    Qu’est-ce que HDInsight ?

HDInsight est la solution Big Data co-implémentée par Microsoft et Hortonworks. Elle permet de traiter, d’analyser et de publier un large volume de données – structurées ou non – en utilisant la puissance de Hadoop, sur des clusters de serveurs.

L’analyse des résultats peut se faire via différents outils tels que PowerPivot, PowerView,…

En réalité, HDInsight existe sous 2 formes :

  • Windows Azure HDInsight, qui permet de déployer et d’utiliser des clusters Hadoop sur le cloud Azure de Microsoft.
  • Microsoft HDInsight Server for Windows, qui n’existe officiellement plus, sauf au sein de 2 solutions :
    • APS (Analytics Platform System), la solution Microsoft de traitement de gros volume de données à haut niveau de performances utilisant SQL Server Parallel DataWarehouse (SSPDW) et bien sûr HDInsight, ainsi qu’une base de données Polybase permettant de stocker les données SSPDW et HDInsight.
    • Hortonworks Data Platform (HDP).

    Fonctionnement général de HDInsight

Le schéma ci-dessous résume l’écosystème de HDInsight :


  • En vert : les packages (Apache Mahout est une librairie d’algorithmes scalables dédiée à l’apprentissage automatique ; RHadoop est une combinaison de packages permettant de manipuler Hadoop en langage R pour les traitements statistiques ; Pegasus pour le graph-mining).
  • En bleu : les éléments de traitement des données (base de données, scripting, requêtage,…).
  • En rouge : le cœur de Hadoop à partir duquel a été implémenté HDInsight, et permettant la distribution du stockage (HDFS) et des traitements (MapReduce).
  • En violet : des outils complémentaires à la solution HDInsight (stockage, analyse, reporting, monitoring, sécurité,…).
  • En orange : le mouvement des données (sachant qu’Apache Flume permet collecter, agréger et router de larges flux de données, Apache Sqoop de gérer le transfert de blocs de données entre Hadoop et des systèmes structurés et l’API REST est un webservice gérant notamment les opérations HTTP).

Pour la gestion et le stockage des données, HDInsight utilise Azure Blob Storage comme système de fichiers par défaut (sachant qu’il est possible de stocker les données dans le HDFS local d’un nœud), sachant que les clusters Hadoop sont optimisés pour traiter des opérations MapReduce.

Pour ce qui est de la gestion des jobs, HDInsight utilise Azure Powershell.

 

Pour aller plus loin…

Gardez un œil ici. D’autres articles autour du Big Data et de HDInsight y seront pondus, y compris des démonstrations techniques.

Voici quelques références intéressantes :


Publicités

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