Hadoop : la structure de sauvegarde pour les importantes quantités de données

Le Big Data est le terme de référence pour désigner la quantité grandissante de données sur le Web. Les ingénieurs développent des méthodes toujours plus efficaces pour traiter systématiquement ces données et les stocker efficacement. Les masses de données à hauteur de plusieurs Petabytes ou exabytes, sont loin de faire office de cas de figures rares. Les données de cette ampleur ne peuvent être gérées par quelques systèmes uniques. Les analystes du Big Data misent pour cela sur des plateformes logicielles pour permettre de mener à bien les opérations informatiques les plus complexes et de les partager sur différents nœuds de calculateurs physiques. Une solution largement appréciée est offerte pour cela par Apache Hadoop, un framework qui sert de base à la distribution de différentes suites du Big Data.

IONOS Cloud Compute Engine

Les moyennes et grandes entreprises choisissent le Cloud Made in Germany. IaaS et PaaS du champion caché aux champions cachés.

Sûr
Fiable
Flexible

Apache Hadoop, c’est quoi au juste ?

Apache Hadoop se base sur Java pour différents composants logiciels, et permet de procéder à une taylorisation du travail. Ainsi, les calculs sont répartis sur différents nœuds d’un cluster (grappe, ou ensemble) d’ordinateurs et de les faire travailler en parallèle. Les structures Hadoop les plus importantes comptent plus d’un millier d’ordinateurs. Ce concept a pour avantage que chaque ordinateur du cluster ne représente qu’une infime partie des ressources matérielles nécessaires. Le traitement de ces importantes quantités de données n’a pas besoin d’être effectué sur des calculateurs élaborés, mais simplement sur une multitude de serveurs standards, ce qui permet d’effectuer des économies importantes. 

Le projet en open source Hadoop a été créé en 2006 par le développeur Doug Cutting et se base sur l’algorithme MapReduce de Google. Doug Cutting s’est rendu compte du potentiel de cet algorithme en 2004, lorsque le moteur de recherche a dévoilé des informations sur une technologie permettant de faire traiter en parallèle d’importantes quantités de données par différents clusters d’ordinateurs. C’est Yahoo qui a tout d’abord soutenu le développeur dans ce projet. En 2008, Hadoop est devenu le projet prioritaire de l’Apache Software Foundation, pour atteindre par la suite le statut 1.0.0.

À côté du lancement officiel de l’Apache Software Foundation, différentes variantes de ce framework logiciel sont disponibles. Chez Cloudera par exemple, il existe une assistance Hadoop nommée « enterprise ready », également en open source. Des produits similaires sont également disponibles chez Hortonworks et Teradata. En ce qui concerne Microsoft, le service Azure, basé sur le Cloud, a été intégré dans Hadoop. Quant à IBM, c’est InfoSphere BigInsights qui se base sur le projet d’Apache.

La structure d’Hadoop : construction et éléments de base

Lorsque l’on évoque Hadoop, c’est généralement de l’ensemble de l’écosystème du logiciel dont il est question. En plus des composants du noyau, (le Core Hadoop), il existe de nombreuses extensions aux dénominations originales, comme  Pig, Chukwa, Oozie ou encore ZooKeeper, qui permettent au framework de travailler des quantités très importantes de données. Ces projets, élaborés les uns à partir des autres, sont soutenus par l’Apache Software Foundation.

Le noyau, ou Core Hadoop, constitue la base fondamentale de l’écosystème de Hadoop. Les éléments qui le composent sont présents dans la version 1 du module de base Hadoop Common, du Hadoop Distributed File System (HDFS) et du MapReduce Engine. À partir de la version 2.3, le système de gestion en clusters YARN (également appelé MapReduce 2.0) le remplace. Ceci exclut l’algorithme MapReduce du système de gestion, qui fonctionne systématiquement à partir de YARN.

Hadoop Common

Le module Hadoop Common dispose donc d’une palette de fonctions de base très vaste. Les données d’archives Java (JAR) en font partie, et sont nécessaires pour démarrer Hadoop. Des bibliothèques pour la sérialisation des données tout comme le module Hadoop Common des codes sources sont disponibles pour la documentation du projet et des sous-projets.

Hadoop Distributed File System (HDFS)

HDFS est un système de fichiers particulièrement disponibles, qui vise à stocker d’importantes quantités de données dans un cluster d’ordinateurs et qui est responsable de la maintenance des données. Les fichiers sont composés de blocs de données et sans schéma de classification, et partagés de manière redondante sur différents nœuds. Par conséquent, HDFS est capable de traiter plusieurs millions de données. La longueur des blocs de données, tout comme leur degré de redondance sont configurables.

Le cluster Hadoop fonctionne sur le principe master / slave (maître / esclave). L’architecture du framework est composée de nœuds maîtres, auquel sont subordonnés de nombreux nœuds esclaves. Ce principe se reflète dans la construction de HDFS, qui est basé sur un NameNode et divers DataNodes subordonnés. Le NameNode gère plusieurs métadonnées du système de fichiers, de la structure des répertoires et des DataNodes subordonnés. Pour minimiser la perte de données, les fichiers sont découpés en différents blocs et stockés sur différents nœuds. La configuration standard soit disponible trois fois à chaque exécution.

Chaque DataNode envoie régulièrement un signe de vie au NameNode, on appelle cela le heartbeat (battement de cœur). Si ce signal ne se manifeste pas, le NameNode décrète l’esclave comme étant « mort » et veille à l’aide des copies de fichiers et des autres nœuds qu’il y ait suffisamment de blocs de données dans le cluster qui soient disponibles. Ainsi, le NameNode joue un rôle essentiel dans le framework. Pour ne pas que celui-ci arrive au stade de « Single Point of Failure », il est d’usage de mettre un SecondaryNameNode à disposition du nœud maître. Cela permet que les différentes modifications apportées aux métadonnées soient stockées et que l’instance de contrôle central puisse être récupérée.

Pour le passage de Hadoop 1 à Hadoop 2, HDFS a été étendu à différents systèmes de sauvegarde : NameNode HA (High Availability) qui complète le programme avec un système en cas de panne NameMode, afin que des composants de remplacement soient utilisés automatiquement. Une fonction de copie Snapshot permet de plus que le système soit restauré au statut précédent. L’extension Federation permet également que divers NameNodes puissent opérer au sein d’un même cluster.

MapReduce Engine

Un autre composant de base du Core Hadoop est l’agorithme de Google MapReduce, qui est implémenté dans la version 1 du framework. Le devoir principal du MapReduce Engine consiste à gérer les ressources et à guider le processus de calcul (Job scheduling / monitoring). Le travail des données repose sur les phases « map » et « reduce », qui permettent aux fichiers d’être travaillés directement où ils sont stockés (data locality). Cela accélère le temps de calcul et minimise la consommation excessive de la bande passante du réseau. Dans le cadre de la phase du MAP, des processus de calculs complexes (jobs) sont divisés en unités et partagés par le JobTracker sur le nœud maître sur différents systèmes esclaves du cluster. Les TaskTracker veillent par la suite à ce que les divers processus partiels soient traités de manière parallèle. Au cours de la Reduce Phase qui s’ensuit, les résultats intermédiaires du MapReduce Engine sont collectés et délivrent un résultat global.

Tandis que le noeud maître est abrité en régle générale par les composants NameNode et JobTracker, un DataNode et un TaskTracker travaillent sur chaque esclave subordonné. Le graphique suivant expose la strucure de base de Hadoop en fonction de la version 1, partagé en MapReduce Layer et HDFS Layer.

Avec la sortie de la version 2.3 de Hadoop, le MapReduce-Engine a été retravaillé. Le résultat a donné la méthode de gestion des clusters YARN/MapReduce 2.0, dont le management des ressources et la gestion des tâches (Job Scheduling/Monitoring) de MapReduce ont été couplés. Ainsi, le framework offre de nombreuses possibilités en matière de nouveaux modèles de travail et une large palette d’applications Hadoop pour le Big Data.

YARN/MapReduce 2.0

Avec l’introduction du module YARN (« Yet Another Resource Negotiator ») à partir de la version 2.3, l’architecture de Hadoop a été fortement modifiée. C’est pourquoi on évoque un passage de Hadoop 1 à Hadoop 2. Tandis que les utilisateurs de Hadoop 1 ont eu à disposition uniquement MapReduce en tant qu’application, le couplage au gestionnaire des ressources et des tâches du modèle de manipulation de données a permis d’intégrer de nombreuses applications pour le Big Data dans le framework. Sous Hadoop 2, MapReduce n’est qu’une des multiples possibilités de traitement des données possibles du framework. YARN adopte le rôle d’un système opérationnel réparti pour la gestion de ressources pour les applications Hadoop Big Data.

Les modifications de base à l’architecture de Hadoop concernent avant tout les deux trackers du MapReduce-Engine, qui n’existent plus en tant que composants uniques dans la version 2 de Hadoop. À la place, le module YARN possède trois nouvelles entités : le ResourceManager, le NodeManager et l’ApplicationMaster.

  • ResourceManager : le ResourceManager global est la plus haute autorité de la structure Hadoop (Master), dont divers NodeManagers sont subordonnés en tant qu’esclaves. Celui-ci a pour rôle de gérer le cluster informatique, de répartir les ressources sur les NodeManagers subordonnés et d’orchestrer les applications. Le ResourceManager sait où les systèmes uniques d’esclaves se trouvent dans le cluster et quelles ressources peuvent être mises à disposition. Un composant important du ResourceManagers est le ResourceScheduler, qui détermine comment les ressources disponibles du cluster seront partagées.
  • NodeManager : un NodeManager agit sur chaque nœud du cluster d’ordinateurs. Celui-ci prend en compte la position des esclaves dans l’infrastructure d’Hadoop 2 et procède en tant que destinataire de commandes du ResourceManager. Si un NodeManager est démarré dans un nœud du cluster, celui-ci véhicule l’information au ResourceManager et envoie un signe de vie périodique (heartbeat). Chaque NodeManager est responsable des ressources de son propre nœud et en met une partie à disposition du cluster. C’est le ResourceScheduler du ResourceManager qui dirige la manière dont les ressources sont utilisées dans le cluster.
  • ApplicationMaster : chaque noeud au sein du système YARN comprend un ApplicationMaster, dont les ressources du ResourceManager et du NodeManager sont mobilisées et divisées sous forme de containers. Su ce container, l’amoncellement de données Big Data sont surveillées et exécutées par l’ApplicationMaster.

Voici un schéma présentant la structure de Hadoop 2 :

Si une application Big Data est exécutée sur Hadoop, trois acteurs sont impliqués : 

  • un client,
  • le ResourceManager
  • un ou plusieurs NodeManagers

Dans la première étape, le client du ResourceManager a pour tâche de démarrer l’application Big Data dans le cluster Hadoop. Celui-ci alloue par la suite un container. En d’autres termes : le ResourceManager réserve les ressources du cluster pour l’application et contacte le NodeManager. Le NodeManager en question démarre le container et exécute l’ApplicationMaster, qui est responsable de l’exécution de l’application et de sa surveillance.

L’écosystème Hadoop : les composants d’extension optionnels

En plus des éléments de base, l’écosystème Hadoop comprend de nombreuses extensions qui le complètent et qui apportent beaucoup au logiciel framework en matière de  fonctionnalités et de flexibilité. De par le code source ouvert et les nombreuses interfaces, les composants supplémentaires peuvent être intégrés à l’envi aux fonctionnalités de base.

La liste suivante dévoile une sélection des projets les plus populaires dans l’écosystème Hadoop :

  • Ambari : le projet Ambari, d’Apache, a été initié par le distributeur Hadoop Hortonworks et complète l’écosystème avec un outil d’installation et de gestion qui met à disposition les ressources informatiques et facilite la gestion d’Hadoop. De plus, Ambari propose un « Step-by-Step-Wizard », une assistance à l’installation étape par étape pour Hadoop. Une interface utilisateur graphique informe du statut du système. De plus, Ambari permet grâce au Ambari Metrics System et au Ambari Alert Framework d’enregistrer des métriques et de configurer divers niveaux d’alarmes.
  • Avro : en ce qui concerne Apache Avro, il s’agit d’un système permettant la sérialisation de données. Avro est basé sur JSON pour définir les types de données et les protocoles. Les données sont quant à elles sérialisées dans un format compact binaire. Cela sert de format de transfert des données pour la communication entre les différents nœuds Hadoop et les programmes client.
  • Cassandra : Apache Cassandra est programmé en Java. Ce système de gestion de base de données partagé est structuré pour les quantités importantes de données, qui suit un principe non relationnel. On évoque également dans cet ensemble les bases de données NoSQL. L’objectif de ce système en open source initialement développé pour Facebook est de permettre un échelonnage souple pour les grandes structures Hadoop réparties. La sauvegarde des données s’effectue sur la base d’une clé en relation avec la valeur réelle du paramètre.
  • HBase : avec HBase, il s’agit également d’une base de données ouverte NoSQL. Elle permet en temps réel d’exécuter les accès en lecture et en écriture de grandes quantités de données au sein d’un cluster d’ordinateurs. HBase se base sur BigTable de Google, un système très performant de bases de données. Comparé à d’autres bases de données NoSQL, HBase se démarque par une cohérence des données hors norme.
  • Chukwa : avec Chukwa, les utilisateurs bénéficient d’un système d’analyse et de collecte des données basé sur le framework Big Data d’Hadoop (HDFS et MapReduce). La surveillance en temps réel est possible même avec les systèmes les plus grands. Pour cela, Chukwa a recours à des agents qui collectent des données sur chaque nœud à surveiller. Ces données sont par la suite transmises à des collectors et stockées dans le HDFS.
  • Flume : Apache Flume est également un service qui a été créé pour permettre la collecte, l’agrégation et la mobilité de données log. Pour exploiter les données à des fins de stockage et d’analyse de différentes sources vers HDFS, Flume se base sur des formats de transport comme Apache Thrift ou Avro.
  • Pig : avec Apache Pig, les utilisateurs ont recours à une plateforme d’analyse d’importantes quantités de données. Les utilisateurs d’Hadoop bénéficient du langage de programmation élaboré Pig Latin. Cela permet de décrire de manière abstraite le flux de données des jobs MapReduce. Ainsi, les requêtes MapReduce ne sont plus programmées en Java, mais en Pig Latin, qui est un langage plus efficace. Les jobs MapReduce sont simplifiés, ainsi que les analyses. À l’origine, Pig Latin a été développé par Yahoo. L’idée réside dans le fait que tout comme les cochons (qui sont omnivores), Pig est programmé de manière à travailler tous les types de données.
  • Hive : avec Apache Hive, Hadoop  propose une base de données centrale créée et optimisée pour les analyses. Le logiciel a été développé par Facebook, et se base sur le framework MapReduce. Avec HiveQL, Hive dispose d’une syntaxe semblable à SQL qui permet de consulter des données sauvegardées en HDFS ou de les analyser. C’est pourquoi Hive traduit les requêtes semblables à SQL automatiquement dans les jobs MapReduce.
  • HCatalog : Un des composants de base d’Apache Hive est HCatalog, un système de gestion tabulaire et de métadonnées. Il permet de sauvegarder et de travailler les données indépendamment de leur format. HCatalog décrit la structure des données et facilite l’utilisation avec Hive ou Pig. 
  • Mahout : Apache Mahout est une extension de la bibliothèque Java pour l’écosystème Hadoop. Cette application de data mining et mathématique a été pensée pour l’apprentissage machine. Les algorithmes qui sont implémentés par Mahout pour Hadoop permettent des opérations comme le classement, le clustering et le filtrage collectif. En pratique, Mahout peut être utilisé pour le développement de services de conseils à la clientèle (de type : « les clients qui ont acheté ce produit consultent également les articles suivants»).
  • Oozie : les composants optionnels de flux de travail Oozie permettent de construire des chaînes de processus et de les automatiser en temps voulu. Ainsi, Oozie compense le déficit du MapReduce Engine présent sur Hadoop 1.
  • Sqoop : avec Apache Sqoop, il s’agit de composants logiciels qui structurent l’import et l’export d’importantes quantités de données du Big Data du framework Hadoop. En règle générale, les données sont stockées dans des bases de données relationnelles par les entreprises de nos jours. Sqoop permet un échange efficace entre les systèmes de stockage et les clusters d’ordinateurs.
  • ZooKeeper : Apache ZooKeeper offre des services pour que les processus du cluster soient coordonnés, en permettant des fonctions de sauvegarde, de répartition et d’actualisation.

Hadoop en entreprise

Comme les clusters Hadoop se construisent sur la base de grandes quantités de données à l’aide d’ordinateurs standards, le framework Hadoop destiné au Big Data est particulièrement apprécié par les grandes entreprises. Les plus grands noms utilisent Hadoop : on compte par exemple Adobe, AOL, eBay, Facebook, Google, IBM, LinkedIn et Twitter. En plus de permettre de stocker facilement des données sur des structures décentralisées et de les travailler en parallèle, le logiciel en open source Hadoop se démarque par sa stabilité, les multiples possibilités d’extensions et le large spectre de fonctionnalités.