Post on 12-Apr-2017
Mémoire
Pour l’Obtention du Diplôme de
Post Graduation Spécialisée
PRÉSENTÉ PAR ACEF MOHAMED
THEME
UTILISATION DU MODELE MAPREDUCE DANS LES
DIFFERENTS SYSTEMES NOSQL: ETUDE COMPARATIVE
Soutenu le : .. / .. / 2015 Devant le jury composé de :
Président: B. Beldjilali Professeur, Université d’Oran 1, Ahmed Ben Bella
Directeur de mémoire : G. Belalem Professeur, Université d’Oran 1, Ahmed Ben Bella
Examinatrice: N. Taghezout MCA, Université d’Oran 1, Ahmed Ben Bella
Code : …/…
اإلعالم اآلليقسم Département d’Informatique
Dédicaces
A mes parents,
A ma femme,
A ma fille Taghrid Ibtihal,
A mon fils Ahmed Yacine,
A mon fils Maemoun Abdelmounaim,
A mes frères et mes sœurs,
Je vous aime !
Mohamed.
Remerciements
Je remercie ALLAH le tout puissant, maître des cieux et de la terre, qui m’a éclairé le
chemin et permis de mener à bien ce travail.
Je remercie mon encadreur Monsieur BELALEM Ghalem pour ces précieux conseils, sa
disponibilité, la confiance qu’il m’a toujours témoigné, et ce tout au long de l’élaboration du
présent travail.
Je remercie les membres de jury d’avoir accepté de siéger et de juger mon travail.
Je remercie également;
mes enseignants de l’université d’Oran,
le Directeur du CPE,
Monsieur BOUHADDA Abdelkader, chef de département TSO,
Monsieur BABA Ahmed Amine, chef de département TQI,
mes collègues du département TSO,
mes collègues du département TQI,
mes collègues du CPE,
Mr BEKKOUCHE Abdelmadjid,
Mr SALHI Ali et sa famille,
pour leurs aides et encouragements jusqu’à la finalisation de ce travail.
SOMMAIRE
INTRODUCTION GENERALE ........................................................................................................3
Chapitre I. Le BIG DATA et le Cloud Computing ..........................................................................4
I.1. Le BIG DATA ...........................................................................................................................5
I.1.1. Introduction .......................................................................................................................5
I.1.2. Définition ...........................................................................................................................5
I.1.3. L’origine des données ......................................................................................................7
I.1.4. Les principaux acteurs ......................................................................................................7
I.1.5. Les enjeux technologiques ................................................................................................8
I.1.6. Les secteurs d’activités ......................................................................................................8
I.1.7. Le stockage .......................................................................................................................10
I.1.8. Le traitement et l’analyse ................................................................................................10
I.2. LE CLOUD COMPUTING ....................................................................................................10
I.2.1.Définition ..........................................................................................................................10
I.2.2. Les différents services .....................................................................................................11
I.2.3. Les formes de déploiement du Cloud Computing ..........................................................11
I.3. Conclusion ..............................................................................................................................13
Chapitre II. Le NoSQL .....................................................................................................................14
II.1. Introduction ..........................................................................................................................15
II.2. Notions préliminaires ...........................................................................................................15
II.2.1. Les propriétés ACID ......................................................................................................16
II.2.2. Scalabilité .......................................................................................................................17
II.2.3. Le Théorème CAP [5]................................................................................................17
II.2.4. L’émergence du NoSQL ................................................................................................18
II.2.5. Types de base NoSQL ...............................................................................................20
II.2.6. Les propriétés de « BASE ».......................................................................................24
II.2.7. Les avantages et les inconvénients du NoSQL .......................................................24
II.3. MapReduce ..........................................................................................................................26
II.3.1. Introduction ....................................................................................................................26
II.3.2. Principe de MapReduce.................................................................................................26
II.3.3. Le modèle de programmation.................................................................................27
II-4 Conclusion .............................................................................................................................29
Chapitre III. HADOOP, HBASE, MONGODB ET YCSB. ............................................................30
III.1. Introduction .........................................................................................................................31
III.2. HADOOP .............................................................................................................................31
III.2.1. Historique ......................................................................................................................31
III.2.2. Présentation d’Hadoop ................................................................................................31
III.2.3. HDFS..............................................................................................................................35
III.2.4. Le composant MapReduce ...........................................................................................37
III.3. HBASE..................................................................................................................................39
III.3. 1. Présentation de Hbase .................................................................................................39
III.3. 2. Architecture de HBASE ...............................................................................................39
III.4. MONGODB .........................................................................................................................41
III.4.1. Présentation de MongoDB ...........................................................................................41
III.4.2. Modèle de données .......................................................................................................41
III.4.3. Architecture ...................................................................................................................42
III.4.4. Le composant Mapreduce ............................................................................................43
III.4.5. Réponse au CAP ...........................................................................................................44
III.5. YCSB : Le Benchmark Yahoo ..............................................................................................44
III.6. Conclusion ...........................................................................................................................45
Chapitre IV. IMPLEMENTATION ET EXPERIMENTATION ....................................................46
IV.1. Introduction .........................................................................................................................47
IV.2. Première partie ....................................................................................................................47
IV.2.1. Installation de Hadoop, HBASE, MongoDB et YCSB ................................................47
IV.2.1.1.Configuration ..............................................................................................................47
IV.2.1.2. Installation d’Hadoop en mode Single Node ..........................................................48
IV.2.1.3. Installation de HBASE ...............................................................................................56
IV.2.1.4. Installation de MongoDB ..........................................................................................59
IV.2.1.5. Comparaison des propriétés système ......................................................................61
IV.2.1.6. Installation de YCSB ..................................................................................................62
IV.3. Deuxième partie : Analyse des tests ..................................................................................64
IV.3.1. Introduction ..................................................................................................................64
IV.3.2. Tests et analyse des résultats .......................................................................................65
IV.3.3. Deuxième cas : Environnement distribué (Cloud) .....................................................77
IV.4. Conclusion : .........................................................................................................................88
CONCLUSION GENERALE ...........................................................................................................89
Référence : ........................................................................................................................................91
Résumé .............................................................................................................................................93
3
INTRODUCTION GENERALE
Nous sommes confrontés depuis quelques années à de nouvelles technologies qui
envahissent le monde de l’information et l’internet. Cette situation nous oblige à prendre les
défis, de connaitre et maîtriser ces « nouvelles sciences » afin de nous permettre de s’adapter
aux changements forcés par cette « révolution scientifique » semblable à celle du XVII siècle.
Beaucoup de concepts « inséparables » dominent actuellement le monde de l’IT. On entend
souvent de « Cloud Computing » ; la « mode » technologique actuelle, hébergeant un « Big
Data » sous forme de « NoSQL » et traité par un simple programme « MapReduce » dans des
« clusters » distribués partout dans le monde.
Ce manuscrit met le point sur ces concepts; et définie la relation qui les relient, en étudiant
deux solutions caractérisées par l’implémentation dans leurs noyaux du même algorithme
« MapReduce », il s’agit de HBASE et MongoDB. Nous essayerons de comparer entre ces deux
solutions. L²’objectif est de donner une conclusion bénéfique aux acteurs intéressés.
Nous commençons, dans les deux premiers chapitres, de donner les définitions et les
descriptions des concepts considérés comme état de l’art pour cette étude. A savoir le « Big
Data », le « Cloud Computing », « Le NoSQL », et l’Algorithme « MapReduce ».
Le troisième chapitre est consacré à la présentation des outils : Hadoop, HBASE, MongoDB, et
YCSB.
Le quatrième chapitre montre la comparaison des résultats déduits à partir de l’évaluation des
performances de chaque base de données, et nous terminerons notre manuscrit par une
conclusion générale et quelques perspectives.
5
I.1. Le BIG DATA
I.1.1. Introduction
En quelques années, le volume des données exploité par les entreprises a
considérablement augmenté. Émanant de sources diverses (transactions, systèmes
d’information automatisés, réseaux sociaux,...), elles sont souvent susceptibles de croître très
rapidement.
Lorsqu’on parle de manipulation de gros volume de données, on pense généralement à des
problématiques sur le volume des données et sur la rapidité de traitement de ces données.
L'idée derrière le "Big Data" est de pouvoir traiter ce grand volume de données.
La première partie de ce chapitre consistera donc à expliquer ce sujet.
D’une autre part, et depuis la création de la technologie de l'internet, une nouvelle tendance
vient de dominer la technologie de l’IT, il s'agit du Cloud Computing . Et afin de mettre le
point sur cette technologie, nous allons consacrer la deuxième partie de ce chapitre pour
présenter ce nouveau marché.
I.1.2. Définition
Le terme «Big Data » est apparu il y’a quelques années pour expliquer un domaine
issu d’une révolution dans la manière de traitement des données. Plusieurs définitions ont été
données.
On trouve principalement la définition donnée par Wikipédia, indiquant qu’il s’agit d’une
“expression anglophone utilisée pour désigner des ensembles de données qui deviennent
tellement gros qu’ils en deviennent difficiles à travailler avec des outils classiques de gestion
de base de données”.[W1]
On trouve d’autres définitions qui peuvent être considéré comme des critiques données à la
définition de Wikipédia. En disant que « Le Big Data est avant tout un terme marketing. À
dire vrai, il recouvre un ensemble de concepts et d'idées pas clairement définis. En se tenant à
6
l'étymologie du terme, Big Data voudrait dire « grosses données ». Or, la problématique des «
grosses données », ou données ayant un volume important, n'est pas nouvelle. [1]
Depuis plus de 30 ans, nous sommes confrontés à des volumes importants de données. Cela
fait presque dix ans que la problématique de gestion des gros volumes de données se pose
dans les métiers de la finance, de l’indexation Web et de la recherche scientifique. Pour y
répondre, l’approche historique a été celle des offres de DataWarehouse.
… En somme, le Big Data, ce serait plutôt des besoins et des envies nouvelles émanant de l'idée de
mieux utiliser ces données qui commencent à s'entasser dans nos DataWarehouse. ».[1]
Le Big Data est défini ; donc ; par rapport à la manière avec laquelle les grandes masses de
données peuvent être traitées et exploitées de façon optimale.
Le concept de Big Data se caractérise par plusieurs aspects. De nombreux responsables
informatiques et autorités du secteur tendent à définir le Big Data selon trois grandes
caractéristiques : Volume, Vitesse et Variété, soit les trois « V ».[1]
- Volume
Le Big Data est associé à un volume de données vertigineux, se situant actuellement entre
quelques dizaines de téraoctets (1 téraoctet=212 octets) et plusieurs péta-octets (1 péta-octets =
215 octets) en un seul jeu de données. Les entreprises, tous secteurs d’activité confondus,
devront trouver des moyens pour gérer le volume de données en constante augmentation qui
est créé quotidiennement.
- Vitesse
La vitesse décrit la fréquence à laquelle les données sont générées, capturées et partagées. Les
entreprises doivent appréhender la vitesse non seulement en termes de création de données,
mais aussi sur le plan de leur traitement, de leur analyse et de leur restitution à l'utilisateur en
respectant les exigences des applications en temps réel.
- Variété
La croissance de la variété des données est largement la conséquence des nouvelles données
multi structurelles et de l'expansion des types de données. Aujourd’hui, on trouve des
capteurs d'informations aussi bien dans les trains, les automobiles ou les avions, ajoutant à
cette variété.
7
Alex Popescu [2] ajoute à cela un quatrième “V”, celui de “variabilité” :
- Variabilité: le format et le sens des données peut varier au fil du temps.
I.1.3. L’origine des données
Les données traitées par le Big Data proviennent notamment [3]:
o du Web: les textes, les images, les vidéos, et tous ce qui peut figurer sur les pages
Web.
o plus généralement, de l’internet et des objets communicants: réseaux de
capteurs, journaux des appels en téléphonie;
o des sciences: génomique, astronomie, physique subatomique, etc.;
o données commerciales
o données personnelles (ex: dossiers médicaux);
o données publiques (open data).
Ces données sont localisées généralement dans les Data Warehouses d’entreprises ou chez les
fournisseurs du Cloud. Ce qui facilite leur traitement en utilisant des méthodes adaptées à ces
architectures. On peut citer par exemple l’algorithme MapReduce.
I.1.4. Les principaux acteurs
Les acteurs sont les organismes qui « produisent » du Big Data, et dans la plupart des
cas ce sont leurs fondateurs.
« Les principales innovations du domaine trouvent leur origine chez les leaders du Web [3]:
Google (MapReduce et BigTable), Amazon (Dynamo, S3), Yahoo! (Hadoop, S4), Facebook
(Cassandra, Hive), Twitter (Storm, FlockDB), LinkedIn (Kafka, SenseiDB, Voldemort),
LiveJournal (Memcached), etc.
La Fondation Apache est ainsi particulièrement active dans ce domaine, en lançant ou en
recueillant plus d’une dizaine de projets, matures ou en incubation: Hadoop,
8
Lucene/Solr,Hbase, Hive, Pig, Cassandra, Mahout, Zookeeper, S4, Storm, Kafka, Flume,
Hama, Giraph, etc.
Outre les sociétés du Web, le secteur scientifique et plus récemment les promoteurs de l’Open
Data (et de sa variante, l’Open Linked Data, issu du Web Sémantique), sont également
historiquement très ouverts à l’Open Source, et ont logiquement effectué des contributions
importantes dans le domaine du Big Data.
I.1.5. Les enjeux technologiques
Pour beaucoup d’entreprises, le Big Data représente de nouveaux enjeux qu’il faut envisager,
mais il faut aussi étudier les risques induits.
D’après Michael Stonebraker [3] « “Il y a beaucoup de bruit autour du Big Data. Ce concept a
plusieurs significations en fonction du type de personnes. Nous pensons que la meilleure
façon de considérer le Big Data est de penser au concept de trois V. Big Data peut être
synonyme de gros volume, du teraoctet au petaoctet. Il peut également signifier la rapidité
[Velocity, NDLR] de traitement de flux continus de données. Enfin, la troisième signification:
vous avez à manipuler une grande variété de données, de sources hétérogènes. Vous avez à
intégrer entre mille et deux mille sources de données différentes et l’opération est un calvaire.
La vérité est que le Big Data a bien trois significations et que les éditeurs n’en abordent qu’une
à la fois. Il est important de connaître leur positionnement pour leur poser les bonnes
questions.”
I.1.6. Les secteurs d’activités
Actuellement, le Big Data est considéré souvent comme un chemin inévitable par les secteurs
économiques, industriels et sociaux dans le monde. Plusieurs organismes et chercheurs
s’intéressent à connaitre les impacts de ce nouveaux concept dans l’avenir.
« Ces secteurs d’activité, qui ont été les premiers à s’intéresser au Big Data, peuvent être
séparés en deux groupes : ceux pour qui le Big Data répond à des besoins historiques de leur
activité, et ceux pour qui il ouvre de nouvelles opportunités. »[1]
La première catégorie regroupe :
- Les Banques.
- La Télécommunication.
9
- Les Médias Numériques.
- Les Marchés Financiers.
Et dans la deuxième catégorie on trouve :
- Les Services Publics
- Le Marketing :
- La Santé :
« …. mais d’autres commencent à s’y intéresser, notamment la Recherche, la Police ou encore
les Transports. »[1]
Afin de répondre à cette demande, de nombreux fournisseurs de technologie de Big Data sont
apparus. Parmi les secteurs d’activités qui s’intéressent aux Big Data, les plus connus sont les
entreprises d’informatiques. Qui sont les « créateurs » des technologies Big Data. Parmi elles :
Microsoft, IBM, Microstrategy, Hurence et TeraData.
Mais de nombreuses autres entreprises utilisent des solutions de Big Data proposées par les
entreprises d’informatiques (figure I.1). Parmi elles, on retrouve différents secteurs d’activité
tels que :
- les télécoms : SFR ;
- les réseaux sociaux : Facebook ;
- des sociétés de services : Amazon Web Services ;
- des sociétés d’analyses : HPCC Systems, 1010 Data, Quantivo, Opera solutions…
Figure. I.1. Les différents secteurs d’activités du BIG DATA
10
I.1.7. Le stockage
Les difficultés de présentation et stockage de données dans les Data Warhouses vu
leurs formes, types et tailles gênent leur exploitation adéquate. La technique utilisée est
l’instauration des bases de données NoSQL.
Les bases NoSQL visent à passer à l’échelle de manière horizontale en relâchant les conditions
fortes de transactionnalité (ACID - atomiques, cohérentes, isolées et durables) attendues des
bases traditionnelles, et en renonçant au modèle relationnel (voir Chapitre 2).
I.1.8. Le traitement et l’analyse
L’architecture distribuée implantée pour le stockage et le traitement des données Big
Data présente un obstacle qui ralenti considérablement le temps espéré par les utilisateurs.
Une technique dite « MapReduce », qui a été utilisée au début par Google, est actuellement
intégrée dans plusieurs solutions Big Data.
MapReduce est à l’origine une technique de programmation connue de longue date en
programmation fonctionnelle, mais surtout un Framework développé par Google en 2004.
La deuxième partie du chapitre 2 est consacré à la présentation de l’algorithme
« MapReduce ».
I.2. LE CLOUD COMPUTING
Depuis sa création, la technologie de l'Internet se développe d’une manière
exponentielle. Actuellement, une nouvelle « tendance » est dominante, il s'agit du Cloud
Computing. Cette technologie, s'appuie sur le WEB 2.0, offre des occasions aux sociétés de
réduire les coûts d'exploitation des logiciels par leurs utilisations directement en ligne.[4]
Dans ce chapitre nous allons présenter les notions fondamentales du Cloud Computing, ses
enjeux, ses évolutions et son utilité.
I.2.1.Définition
Le CloudComputing, « littéralement l'informatique dans les nuages » est un concept
qui consiste à «rendre accessible et exploitable des données et des applications à travers un
réseau. Ce terme désigne à la fois les applications en tant que services sur Internet et le
matériel et logiciels qui permettent de fournir ces services ».[4]
11
I.2.2. Les différents services
Le concept « Cloud Computing » est utilisé pour désigner des services, on distingue trois
"catégories" de services fournis :
Infrastructure as a service : IaaS
Platform as a service : PaaS
Software as a service : Saas
IAAS
Il s’agit de la mise à disposition, à la demande, de ressources d’infrastructures dont la plus
grande partie est localisée à distance dans des Data Center.
PAAS
PAAS désigne les services visant à proposer un environnement complet permettant de
développer et déployer des applications.
SAAS
Il s'agit des plateformes du nuage, regroupant principalement les serveurs mutualisés et
leurs systèmes d'exploitation. En plus de pouvoir délivrer des logiciels.
I.2.3. Les formes de déploiement du Cloud Computing
Nous distinguons trois formes de Cloud Computing: Le Cloud publique, également le
premier apparu, le Cloud privé et le Cloud hybride qui est en fait la combinaison des deux
premiers.
Le Cloud publique
Le principe est d'héberger des applications, en général des applications Web, sur un
environnement partagé avec un nombre illimité d'utilisateurs. La mise en place de ce type de
Cloud est gérée par des entreprises tierces (exemple Amazon, Google, etc.). Les fournisseurs
du Cloud publique les plus connus sont Google et Amazon.
Ce modèle est caractérisé par :
- Demande de lourds investissements pour le fournisseur de services.
- Offre un maximum de flexibilité.
- N’est pas sécurisé.
12
Le Cloud privé
C'est un environnement déployé au sein d'une entreprise en utilisant les infrastructures
internes de l’entreprise, et en utilisant des technologies telles que la virtualisation.
Les ressources sont détenues et contrôlées par le département informatique de l’entreprise.
Eucalyptus, OpenNebula et OpenStack sont des exemples de solution pour la mise en place
du Cloud privé.
Le Cloud hybride
En général, on entend par Cloud hybride la cohabitation et la communication entre un Cloud
privé et un Cloud publique dans une organisation partageant des données et des applications.
13
I.3. Conclusion
Nous avons tenté dans ce premier chapitre de comprendre les concepts de «Big Data »
et de « Cloud Computing ». Ces notions préliminaires aideront à mieux comprendre le
contexte de traitement de nouveaux types données difficile à être classer dans les bases de
données relationnel. Les systèmes de gestion de bases de données NoSQL appariaient ces
dernières années pour solutionner ce problème.
Nous avons présenté dans la deuxième partie de ce chapitre la technologie du Cloud
Computing ainsi que les types de services Cloud connus jusqu'à présent.
Nous allons présenter dans le chapitre suivant d’autres concepts qui ont une relation directe
avec le Big Data et le Cloud Computing. Il s’agit du NoSQL et l’algorithme « MapReduce ».
15
II.1. Introduction
On ne peut pas parler de Big Data sans citer le NoSQL, Not Only SQL. Il est venu pour
solutionner les difficultés rencontrées pendant la gestion des données classées « Big Data »
avec les systèmes SGBD relationnels.
Nous allons donner dans ce chapitre quelques notions préliminaires qui vont faciliter la
comprenions et la présentation des bases de données NoSQL.
En fin du chapitre, nous allons présenter l’algorithme « MapReduce » qui est devenu
actuellement le noyau des procédures intégrés dans la plupart des systèmes de gestion de
bases de données NoSQL.
II.2. Notions préliminaires
Une base de données (BDD) est un dispositif dans lequel il est possible de stocker des
données de manière structurée ou semi-structurée et avec le moins de redondances possibles.
Accessibles par des programmes employés par plusieurs utilisateurs.
Une base de données peut être soit locale, soit répartie. Dans ce dernier cas, les informations
sont stockées sur des machines distantes et accessibles par le réseau. L’accès aux données doit
être géré par des droits accordés aux utilisateurs.
L'avantage majeur des bases de données réparties est la possibilité de pouvoir être accédées
simultanément par plusieurs utilisateurs.
Les bases de données sont gérées par un système appelé « système de gestion de base de
données », abrégé SGBD. C’est un logiciel dont les tâches sont principalement l’accès aux
données, l’insertion de données, l’autorisation des accès aux informations simultanément à de
multiples utilisateurs ainsi que la manipulation des données présentes dans la base.
Suite aux limites du modèle hiérarchique et du modèle réseaux qui sont apparus au début
pour implémenter la représentation physique des données ; le modèle relationnel est
actuellement le SGBD le plus répandu. Dans ce modèle, les informations sont décomposées et
organisées dans des matrices à deux dimensions (ligne-colonne) appelées relations ou tables.
La manipulation de ces données se fait selon la théorie mathématique des opérations
d’algèbre relationnelle telles que l’intersection, la jointure ou le produit cartésien.
16
La manipulation répondue dans le monde de plusieurs types et formes de données et sur
plusieurs plateformes impose deux « critères » de mesure de performances: Les propriétés
ACID et la « Scalabilité».
II.2.1. Les propriétés ACID
Lorsque des transactions sont effectuées, les SGBD de type hiérarchique, réseau et
relationnel fonctionnent selon les contraintes dites ACID.
ACID est un acronyme qui veut dire « Atomicity », « Consistancy », « Isolation » et «
Durability ». Une transaction est réalisée avec succès si elle respecte ces quatre contraintes.
Voici une description détaillée de celles-ci [W2] :
« Atomicity » (Atomicité) :
Lorsqu’une transaction est effectuée, toutes les opérations qu’elle comporte doivent être
menées à bien : en effet, en cas d’échec d’une seule des opérations, toutes les opérations
précédentes doivent être complètement annulées, peu importe le nombre d’opérations déjà
réussies. En résumé, une transaction doit s’effectuer complètement ou pas du tout. Voici un
exemple concret : une transaction qui comporte 3000 lignes qui doivent être modifiées ; si la
modification d’une seule des lignes échoue, alors la transaction entière est annulée.
L’annulation de la transaction est toute à fait normale, car chaque ligne ayant été modifiée
peut dépendre du contexte de modification d’une autre, et toute rupture de ce contexte
pourrait engendrer une incohérence des données de la base.
« Consistancy » (Cohérence) :
Avant et après l’exécution d’une transaction, les données d’une base doivent toujours être
dans un état cohérent. Si le contenu final d’une base de données contient des incohérences,
cela entraînera l’échec et l’annulation de toutes les opérations de la dernière transaction. Le
système revient au dernier état cohérent. La cohérence est établie par les règles fonctionnelles.
« Isolation » (Isolation) :
La caractéristique d’isolation permet à une transaction de s’exécuter en un mode isolé. En
mode isolé, seule la transaction peut voir les données qu’elle est en train de modifier, c’est le
système qui garantit aux autres transactions exécutées en parallèle une visibilité sur les
données antérieures. Ce fonctionnement est obtenu grâce aux verrous système posés par le
SGBD. Prenons l’exemple de deux transactions A et B : lorsque celles-ci s’exécutent en même
17
temps, les modifications effectuées par A ne sont ni visibles, ni modifiables par B tant que la
transaction A n’est pas terminée et validée par un « commit ».
« Durability » (Durabilité) :
Toutes les transactions sont lancées de manière définitive. Une base de données ne doit pas
afficher le succès d’une transaction pour ensuite remettre les données modifiées dans leur état
initial. Pour ce faire, toute transaction est sauvegardée dans un fichier journal afin que, dans le
cas où un problème survient empêchant sa validation complète, elle puisse être correctement
terminée lors de la disponibilité du système.
II.2.2. Scalabilité
La « scalabilité » est le terme utilisé pour définir l’aptitude d’un système à maintenir
un même niveau de performance face à l’augmentation de charge ou de volumétrie de
données, par augmentation des ressources matérielles.
Il y a deux façons de rendre un système extensible :
La « scalabilité » horizontale
Le principe de la « scalabilité » horizontale consiste à simplement rajouter des serveurs en
parallèle.
La « scalabilité » verticale
Elle consiste à augmenter les ressources d’un seul serveur, comme par exemple le
remplacement du CPU par un modèle plus puissant ou par l’augmentation de la capacité de
la mémoire RAM.
Ces deux critères; ACID et scalabilité ; sont limités par le théorème CAP qui signifie
«Coherence», «Availability» et «Partition tolerance», aussi connu sous le nom de théorème de
Brewer [6].
II.2.3. Le Théorème CAP [5]
Ce théorème, formulé par Eric Brewer en 2000 et démontré par Seth Gilbert et Nancy Lych
en 2002, énonce une conjecture qui définit qu’il est impossible, sur un système informatique
de calcul distribué, de garantir en même temps les trois contraintes suivantes :
18
« Coherence » (Cohérence) :
Tous les clients du système voient les mêmes données au même instant.
« Availibility » (Haute disponibilité) :
Un système est dit disponible si toute requête reçue par un nœud retourne un résultat. Bien
évidemment le nœud en question ne doit en aucun cas être victime de défaillance.
« Partition tolerance » (Tolérance à la partition) :
Un système est dit tolérant à la partition s’il continue à répondre aux requêtes de manière
correcte même en cas de panne autre qu’une panne totale du système.
Seuls deux des trois contraintes peuvent être respectés en même temps
Fig. II.1. Théorème de CAP
II.2.4. L’émergence du NoSQL
Le volume de données de certaines entreprises est augmenté considérablement durant
ces dernières années. L’informatisation croissante de traitement en tout genre a eu pour
conséquence une augmentation exponentielle de ce volume de données qui se compte
désormais en pétaoctets, les anglo-saxon l’ont nommé le Big Data (Voir Chapitre 1).
La gestion de ces volumes de données est donc devenue un problème que les bases de
données relationnelles n’ont plus été en mesure de gérer ; la raison suite à laquelle est apparus
le NoSQL comme solution plus performante par rapport aux systèmes de gestion des bases de
données relationnels.
19
Beaucoup d'organisations doivent stocker de grandes quantités de données, la plupart des
SGBD relationnel actuels ne permettent plus de répondre aux besoins de stockage et de
traitement de ces grandes quantités.
Le besoin fondamental auquel répond le NoSQL est la performance. Afin de résoudre les
problèmes liés au « Big Data », les développeurs de sociétés telles que Google et Amazone ont
procédé à des compromis sur les propriétés ACID des SGBDR. Ces compromis sur la notion
relationnelle ont permis aux SGBDR de se libérer de leurs freins à la scalabilité horizontale.
Un autre aspect important du NoSQL est qu’il répond au théorème de CAP qui est plus
adapté pour les systèmes distribués.[5]
Ce sont les grands acteurs du Web tels que Google, Amazon, Linkedin et Facebook qui ont
solutionné leurs problèmes en développant, en parallèle de leurs activités primaire, leurs
propres SGBD NoSQL. A l’heure actuelle, la quasi-totalité des sites à fort trafic utilisent des
SGBD NoSQL.[6]
Un des premiers buts des systèmes NoSQL est de renforcer la « scalabilité » horizontale, il faut
pour cela que le principe de tolérance au partitionnement soit respecté, ce qui exige l’abandon
soit de la cohérence, soit de la haute disponibilité.[6]
Le NoSQL ou « Not Only SQL » est un mouvement très récent (2009), qui concerne les bases
de données.
L’idée du mouvement est simple : proposer des alternatives aux bases de données
relationnelles pour coller aux nouvelles tendances et architectures du moment, notamment le
Cloud Computing.[7]
Les axes principaux du NoSQL sont une haute disponibilité et un partitionnement horizontal
des données, au détriment de la consistance. Alors que les bases de données relationnelles
actuelles sont basées sur les propriétés ACID (Atomicité, Consistance, Isolation et Durabilité).
Un SGBDR pour répondre aux exigences de performance face aux gros volumes de données,
doit se retourner vers du matériel de plus en plus rapide et à l'ajout de mémoire. Le NoSQL,
pour sa part, pour gérer la « montée en charge » se réfère à la répartition de la charge sur les
systèmes de Cloud Computing. Il s'agit la de composant de NoSQL qui fait d'elle une solution
peu coûteuse pour les grands ensembles de données.
20
II.2.5. Types de base NoSQL
Il existe une diversité d’approches NoSQL classées en quatre catégories. Ces différents
systèmes NoSQL utilisent des technologies fortes distinctes spécifiques à différentes solutions
[7. Voici quelques exemples]:
Orientées colonnes : HBase, Hyper table, Cassandra et BigTable
Orientées graphes (Euler) : Neo4J16
Orientées clé-valeur : Voldemort , Dynamite et Riak
Orientées document : MongoDB, CouchDB.
Ces différents modèles de structure sont décrits comme suit :
Base de données Orientée Clé- valeur
Cette structure est très adaptée à la gestion des caches ou pour fournir un accès rapide aux
informations [W3]. La base de données de type clé-valeur est considérée comme la plus
élémentaire. Son principe est très simple, chaque valeur stockée est associée à une clé unique.
C’est uniquement par cette clé qu’il sera possible d’exécuter des requêtes sur la valeur.
Souvent assimilé à une « hashmap » distribuée, le système de base de données de type
clé/valeur est probablement le plus connu et le plus basique que comporte la mouvance
NoSQL. [6]
La structure de l’objet stocké est libre et donc à la charge du développeur de l’application. Un
avantage considérable de ce type de base de données est qu’il est très facilement extensibles,
on parle donc de scalabilité horizontale.
Fig. II.2. Schéma d’une Base de données Orientée Clé-valeur
21
La structure de l’objet est libre et le plus souvent laissé à la charge du développeur de
l’application (par exemple XML, JSON, ...), la base ne gérant généralement que des chaînes
d’octets. [7]
La communication avec la base de données se résume aux opérations basiques que sont PUT,
GET, UPDATE et DELETE. La plupart des bases de données de type clé/valeur disposent
d’une interface HTTP REST qui permet de procéder très facilement à des requêtes depuis
n’importe quel langage de développement.
Ces systèmes sont donc principalement utilisés comme dépôt de données à condition que les
types de requêtes nécessitées soient très simples. On les retrouve comme système de stockage
de cache ou de sessions distribuées, particulièrement là où l’intégrité des données est non
significative. Aujourd’hui, les solutions les plus connues ayant adoptées le système de couple
clé-valeur sont Voldemort (LinkedIn), Redis et Riak. [5]
Les bases de données orientées colonnes
Les bases de données orientées colonnes ont été conçues par les géants du web afin de faire
face à la gestion et au traitement de gros volumes de données s’amplifiant rapidement de
jours en jours.
Ce modèle ressemble à première vue à une table dans un SGBDR à la différence qu’avec une
BD NoSQL orientée colonne, le nombre de colonnes est dynamique.
En effet, dans une table relationnelle, le nombre de colonnes est fixé dès la création du schéma
de la table et ce nombre reste le même pour tous les enregistrements dans cette table. Par
contre, avec ce modèle, le nombre de colonnes peut varier d’un enregistrement à un autre ce
qui évite de retrouver des colonnes ayant des valeurs NULL.
Le concept de base est décrit comme suit :
- Column : c’est l’entité de base qui représente un champ de données. Toutes les
colonnes sont définies par un couple clé/valeur
- Super column : c’est une colonne qui contient d’autres colonnes
- Column family : elle est considérée comme un conteneur de plusieurs colonnes ou
super-colonnes
- Row : c’est l’identifiant unique de chaque ligne de colonne
22
- Value : c’est le contenu de la colonne. Cette valeur peut très bien être une colonne
elle-même.
Ce type de structure permet d’être plus évolutif et flexible ; cela vient du fait qu’on peut
ajouter à tout moment une colonne ou une super-colonne à n’importe quelle famille de
colonnes.
Les bases de données orientées documents
Les bases de données documents sont une évolution des bases de données de type clé-valeur.
Ici les clés ne sont plus associées à des valeurs sous forme de bloc binaire mais à un document
dont le format n’est pas imposé.
Les bases de données documentaires sont constituées de collections de documents (Figure
II.3). Un document est composé de champs et des valeurs associées, ces dernières pouvant être
requêtées. A ce titre, il n’est pas nécessaire de définir au préalable les champs utilisés dans un
document. Les documents peuvent être très hétérogènes au sein de la base.
Le stockage structuré des documents leur confère des fonctionnalités dont ne disposent pas
les bases clés-valeurs simples dont la plus évidente est la capacité à effectuer des requêtes sur
le contenu des objets. La valeur, dans ce cas, est un document de type JSON ou XML par
exemple. [W3]
CLE …Figure II.3. Schéma d’une base de données orientée documents
23
L’avantage des bases de données documents est de pouvoir récupérer un ensemble
d’informations structurées hiérarchiquement depuis une clé. Une opération similaire dans le
monde relationnelle équivaudrait à plusieurs jointures de table.[5]
Les bases de données orientées graphe
Bien que les bases de données de type clé-valeur, colonne, ou document tirent leur principal
avantage de la performance du traitement de données, les bases de données orientées graphe
permettent de résoudre des problèmes très complexes qu’une base de données relationnelle
serait incapable de faire. [6]
Ce modèle de représentation des données se base sur la théorie des graphes. Il s’appuie sur la
notion de nœuds, de relations et de propriétés qui leur sont rattachées (Figure II.4).
Ce modèle facilite la représentation du monde réel, ce qui le rend adapté au traitement des
données des réseaux sociaux
Ces bases permettent la modélisation, le stockage ainsi que le traitement de données
complexes reliées par des relations. Ce modèle est composé d’un :
Moteur de stockage pour les objets : c’est une base documentaire où chaque entité de
cette base est nommée nœud.
Mécanisme qui décrit les arcs : c’est les relations entre les objets, elles contiennent des
propriétés de type simple (integer, string, date,...).
Figure II.4. Schéma d’une base de données Orientées graphe.
24
II.2.6. Les propriétés de « BASE »
Dans la première partie de ce chapitre consacrée aux notions préliminaires, nous avons
vu les propriétés ACID auxquelles doivent répondre les SGBD de type relationnel. Les SGBD
NoSQL par contre doivent vérifier les propriétés dites propriétés de BASE.
Le principe de BASE est le fruit d’une réflexion menée par Eric Brewer (Théorème de CAP).
Les caractéristiques de BASE sont fondées sur les limites que montrent les SGBD
relationnelles. Voici sa description[6] :
Basically Available (Disponibilité basique) :
Même en cas de désynchronisation ou de panne d’un des nœuds du cluster, le système reste
disponible selon le théorème CAP.
Soft-state (Cohérence légère) :
Cela indique que l’état du système risque de changer au cours du temps, sans pour autant que
des données soient entrées dans le système. Cela vient du fait que le modèle est cohérent à
terme.
Eventual consistancy (Cohérence à terme) :
Cela indique que le système devient cohérent dans le temps, pour autant que pendant ce laps
de temps, le système ne reçoive pas d’autres données.
II.2.7. Les avantages et les inconvénients du NoSQL
Plusieurs avantages peuvent être associés aux systèmes NoSQL, nous pouvons citer par
exemple :
o La « scalabilité » horizontale :
Aujourd’hui, la rapidité en lecture/écriture ainsi que la haute disponibilité sont devenues des
critères indispensables. C’est pourquoi les bases de données NoSQL répondent entièrement à
ce besoin. Elles ont été conçues pour répandre les données de manière transparente sur
plusieurs nœuds et ainsi former un cluster. Les performances qu’offrent la «scalabilité »
horizontale peuvent même être atteintes avec des serveurs bas de gamme, ce qui rend la
structure plus économique. [6]
La scalabilité horizontale offre d’autres avantages non négligeables, comme une grande
tolérance aux pannes où les coûts réduits relatifs à l’achat du matériel (plus besoin d’acheter
de serveurs extrêmement puissants).
25
o Gros volume de données (Big Data)
NoSQL est plus évolutif. C’est en effet l’élasticité de ses bases de données NoSQL qui le rend
si bien adapté au traitement de gros volumes de données.
o Economique
Les bases de données NoSQL ont tendance à utiliser des serveurs bas de gammes dont le coût
est moindre afin d’équiper les « clusters ». Les serveurs destinés aux bases de données NoSQL
sont généralement bon marché et de faible qualité, contrairement à ceux qui sont utilisés par
les bases relationnelles. De plus, la très grande majorité des solutions NoSQL sont Open–
Source, ce qui reflète d’une part une économie importante sur le prix des licences.
o Plus flexible
N’étant pas enfermée dans un seul et unique modèle de données, une base de données
NoSQL est beaucoup moins restreinte qu’une base SQL. Les applications NoSQL peuvent
donc stocker des données sous n’importe quel format ou structure, et changer de format en
production.
o Le Cloud Computing
NoSQL et le Cloud s’associent de façon naturelle. En effet, le Cloud Computing répond
extrêmement bien aux besoins en matière de scalabilité horizontale que requièrent les bases de
données NoSQL. En plus la pluparts des solutions Cloud sont basés sur le NoSQL.
Néanmoins, l’inconvénient majeur est que les SGBD relationnel occupent actuellement la
grande partie du marché mondial, ce qui implique une lenteur dans l’adoption des solutions
NoSQL par les décideurs IT. Dans le monde NoSQL, presque tous les développeurs sont en
apprentissage avec la technologie.
Ces inconvénients vont disparaitre après quelques années vu la tendance mondiale vers les
SGBD NoSQL.
26
II.3. MapReduce
II.3.1. Introduction
Le traitement des données par un SGBD NoSQL est caractérisé par son stockage dans
des supports distribués appelés «Clusters» d’une part, et d’autre part par la quantité
gigantesque des données. Ce qui exige une fragmentation (décomposition) des données et
leurs traitements simultanés (en parallèle), en plus, la finalité est de regrouper les résultats. Ce
traitement de données de façon distribuée soulève certaines questions : Comment distribuer le
travail entre les serveurs ? Comment synchroniser les différents résultats ? Comment gérer
une panne d’une unité de traitement ?
Une des solutions proposées est l’utilisation de l’algorithme « Map Reduce ».
Il ne s’agit pas d’un élément de base de données, mais d’un modèle de programmation
s’inspirant des langages fonctionnels et plus précisément du langage Lisp. Il permet de traiter
une grande quantité de données de manière parallèle, en les distribuant sur divers nœuds
d’un Cluster. Ce mécanisme a été mis en avant par Google en 2004 et a connu un très grand
succès auprès des sociétés utilisant des DataCenter telles que Facebook ou Amazon. [5]
MapReduce est un patron d'architecture de développement informatique, popularisé (et non
inventé) par Google, dans lequel sont effectués des calculs parallèles, et souvent distribués, de
données potentiellement très volumineuses, typiquement supérieures en taille à 1 téraoctet.
[W4]
II.3.2. Principe de MapReduce
Le principe de MapReduce est simple (voir Figure II-5): il s’agit de découper une tâche
manipulant un gros volume de données en plusieurs tâches traitant chacune un sous-
ensemble de ces données. Dans la première étape (Map) les tâches sont donc dispatchées sur
l’ensemble des nœuds. Chaque nœud traite un ensemble des données. Dans la deuxième
étape, les résultats sont consolidés pour former le résultat final du traitement (Reduce).
27
Figure II.5. Les étapes Map et Reduce
II.3.3. Le modèle de programmation
MapReduce consiste en deux fonctions map() et reduce().
Dans l'étape Map, le nœud analyse un problème, le découpe en sous-problèmes, et les
délègue à d'autres nœuds (qui peuvent en faire de même récursivement). Les sous-
problèmes sont ensuite traités par les différents nœuds à l'aide de la fonction Reduce
qui à un couple (clé, valeur) associe un ensemble de nouveaux couples (clé, valeur) :
map(clé1,valeur1) → list(clé2,valeur2)
Fonction Map :
//En pseudo code cela donnerait Map(void * document){
int cles = 1;
for each mot m in document
calculIntermediaire(m,cles);
}
Vient ensuite l'étape Reduce, où les nœuds les plus bas font remonter leurs résultats au
nœud parent qui les avait sollicités. Celui-ci calcule un résultat partiel à l'aide de la
fonction Reduce (réduction) qui associe toutes les valeurs correspondantes à la même
clé à une unique paire (clé, valeur). Puis il remonte l'information à son tour.
28
À la fin du processus, le nœud d'origine peut recomposer une réponse au problème qui lui
avait été soumis :
reduce(key2,list(valeur2))→ list(valeur2)
Fonction Reduce :
//En pseudo code cela donnerait
Reduce(entier cles, Iterator values){
int result = 0;
for each v in values
result += v;
}
MapReduce peut être utilisé pour un grand nombre d'applications, dont grep distribué, tri
distribué, inversion du graphe des liens Web, vecteur de terme par hôte, statistiques d'accès
au Web, construction d'index inversé, classification automatique de documents, apprentissage
automatique. [W4]
Le MapReduce a émergé en 2004 comme un important modèle de programmation pour les
applications utilisant d’énormes quantités de données grâce à sa répartition efficace du travail
sur différents nœuds de calcul. Il commence notamment à être utilisé dans le Cloud
Computing, car son nombre de données stockées et manipulées ne cesse de croître. Il est donc
nécessaire d'avoir un moyen d'améliorer le traitement des données au sein du Cloud. [W4]
29
II-4 Conclusion
Nous avons montré dans ce chapitre les différents types de bases de données NoSQL
avec leurs différents domaines d’utilisation.
Nous avons présenté en fin du chapitre l’algorithme MapReduce, et nous avons expliqué ses
composants et son fonctionnement.
Le chapitre suivant sera consacré à présenter deux solutions NoSQL. Le but est de comparer
leur performance et d’arriver, en cas de besoin, à en choisir la bonne solution pour les
circonstances liées au type de données choisies et au type de traitement exécuté sur ces
données.
31
III.1. Introduction
Nous nous intéresserons particulièrement dans ce chapitre aux technologies HBASE,
MongoDB, et Hadoop le framework Java destiné aux applications distribuées et à la gestion
intensive des données. Ce sont des technologies récentes, encore relativement peu connues du
grand public mais auxquelles nous associons déjà des grands noms parmi lesquels : Facebook,
Yahoo ou encore Twitter.
Nous présentons en fin de chapitre l’outil Yahoo ! Cloud Serving Benchmark (YCSB) qui un
générateur de banque d'essais (benchmark en anglais) pour les bases de données NoSQL sur
Cloud Computing.
III.2. HADOOP
III.2.1. Historique
Doug Cutting l’un des fondateurs de Hadoop, travaillant à l’époque sur le
développement de Apache Lucene, cherchait une solution quant à la distribution du
traitement de Lucene afin de bâtir le moteur d’indexation web Nutch. Il décidait donc de
s’inspirer de la publication de Google sur leur système de fichier distribué GFS (Google File
System). Premièrement, renommer NDFS, il sera rebaptisé HDFS pour Hadoop Distributed
File System [5].
III.2.2. Présentation d’Hadoop
Hadoop est un ensemble de logiciels et d’outils qui permettent de créer des
applications distribuées. C’est une plate-forme logicielle open-source, écrite en Java et fondée
sur le modèle MapReduce de Google et les systèmes de fichiers distribués (HDFS). Elle permet
de prendre en charge les applications distribuées en analysant de très grands ensembles de
données.
Hadoop est utilisé particulièrement dans l’indexation et le tri de grands ensembles de
données, le data mining, l’analyse de logs, et le traitement d’images. Le succès de Google lui
est en partie imputable. En 2001, alors qu’il n'en est encore qu'à ses balbutiements sur le
marché des moteurs de recherche, le futur géant développe ce qui inspira les composants
phares d'Hadoop: MapReduce, Google BigTable et Google BigFiles (futur Google File System).
Ces deux points forment l’écosystème Hadoop, écosystème fortement convoité et qui se
trouve au centre de l’univers du Big Data [10].
32
Hadoop fait partie des projets de la fondation de logiciel Apache depuis 2009. Il est destiné à
faciliter le développement d’applications distribuées et scalables, permettant la gestion de
milliers de nœuds ainsi que des pétaoctets de données.
En 2011, Yahoo! crée Horton works, sa filiale dédiée à Hadoop. L'entreprise se concentre sur le
développement et le support d'Apache Hadoop. De la même manière, Cloudera, créé au
début de l'année 2009, se place comme l'un des plus gros contributeurs au projet Hadoop, au
côté de MapR (2009) et Hortonworks.
Typologie d’un cluster Hadoop
Hadoop repose sur un schéma dit « maître-esclave » et peut être décomposé en cinq éléments.
(Fig III.1) :
Le nom du noeud (Name Node) : Le « Name Node » est la pièce centrale dans le HDFS, il
maintient une arborescence de tous les fichiers du système et gère l’espace de nommage. Il
centralise la localisation des blocs de données répartis sur le système. Sans le « Name Node»,
les données peuvent être considérées comme perdues car il s’occupe de reconstituer un fichier
à partir des différents blocs répartis dans les différents « Data Node ». Il n’y a qu’un «Name
Node» par cluster HDFS.
Le gestionnaire de tâches (Job Tracker) : Il s’occupe de la coordination des tâches sur les
différents clusters. Il attribue les fonctions de MapReduce aux différents « TaskTrackers ». Le
« Job Tracker » est un « Daemon » cohabitant avec le « Name Node » et ne possède donc
qu’une instance par cluster.
Le moniteur de tâches (Tasktracker) : Il permet l’exécution des ordres de mapReduce, ainsi
que la lecture des blocs de données en accédant aux différents « Data Nodes ». Par ailleurs, le
« TaskTracker » notifie de façon périodique au « Job Tracker » le niveau de progression des
tâches qu’il exécute, ou alors d’éventuelles erreurs pour que celui-ci puisse reprogrammer et
assigner une nouvelle tâche Un « TaskTracker est un « Deamon » cohabitant avec un « Data
Node », il y a un donc un « TaskTracker » par « Data Node ».
Le noeud secondaire (Secondarynode) : N’étant initialement pas présent dans l’architecture
Hadoop, celui-ci a été ajouté par la suite afin de répondre au problème du point individuel de
défaillance (SPOF- Single point of failure). Le « Secondary Node » va donc périodiquement
faire une copie des données du « Name Node » afin de pouvoir prendre la relève en cas de
panne de ce dernier.
33
Le nœud de données (Data Node) : Il permet le stockage des blocs de données. Il
communique périodiquement au « Name Node » une liste des blocs qu’il gère. Un HDFS
contient plusieurs noeuds de données ainsi que des réplications d’entre eux. Ce sont les
nœuds esclaves [5].
Figure III.1 Architecture d’un Cluster Hadoop
Un Cluster Hadoop peut être constitué de machines hétérogènes, que ce soit au niveau du
hardware comme au niveau software (système d’exploitation). Cependant il est bien plus
simple d’administrer un cluster de type homogène [5].
Hadoop est aujourd’hui l’un des outils les plus pertinents pour répondre aux problèmes du
Big Data [5]. C’est la première technologie qui vient à l’esprit lorsque l’on évoque aujourd’hui
ce sujet [11].
34
Les points forts d’Hadoop se résument dans ses caractéristiques suivantes :
- évolutif, car pensé pour utiliser plus de ressources physiques, selon les besoins, et de
manière transparente ;
- rentable, car il optimise les coûts via une meilleure utilisation des ressources
présentes;
- souple, car il répond à la caractéristique de variété des données en étant capable de
traiter différents types de données ;
- et enfin, résilient, car pensé pour ne pas perdre d'information et être capable de
poursuivre le traitement si un nœud du système tombe en panne [10].
Hadoop n’a pas été conçu pour traiter de grandes quantités de données structurées à grande
vitesse. Cette mission reste largement l’apanage des grands systèmes de Datawarehouse et de
Datamart reposant sur des SGBD traditionnelles et faisant usage de SQL comme langage de
requête. La spécialité d’Hadoop, ce serait plutôt le traitement à très grande échelle de grands
volumes de données non structurées tels que des documents textuels, des images, des fichiers
audio,… même s’il est aussi possible de traiter des données semi-structurées ou structurées
avec Hadoop [11].
Exemple d’usage
Ce qui fait la spécificité de Hadoop est qu’il est conçu pour traiter un énorme volume de
données en un temps record. A titre d’exemple, les Laboratoires de Yahoo! ont trié
l’équivalent de 500 GB de données en 59 secondes sur un Cluster de 1400 nœuds (Avril 2009).
Sa vocation première est donc d’implémenter des traitements batchs performants,
particulièrement lorsqu’ils impliquent un volume de données très important. En dehors de
Yahoo!, citons les cas d’utilisation de deux sociétés prestigieuses :
La plateforme musicale Last.fm met en œuvre Hadoop pour générer les statistiques
hebdomadaires (Tops artistes et Top titres) ou mesurer les tendances musicales.
Facebook l’utilise pour la production de rapports à usage interne, comme la
performance des campagnes publicitaires opérées par la plateforme sociale, ou des
statistiques diverses (croissance du nombre des utilisateurs, consultation des pages,
temps moyen de consultation du site, etc.) [W4].
35
III.2.3. HDFS
HDFS (Hadoop Distributed File System) est un système de fichiers distribué, inspiré
du système GFS développé par Google. Il se démarque des autres systèmes de fichier
distribués par sa grande tolérance aux fautes [8] et le fait qu’il soit conçu pour être déployé sur
des machines à faible coût. HDFS fournit un haut débit d’accès aux données et est adapté pour
les applications qui nécessitent de grands groupes de données. Il a été à l’origine conçu pour
le projet de moteur de recherche web Apache Nutch [9].
HDFS a une architecture de type maître/esclave. Un Cluster HDFS est constitué d’un unique
NameNode, un serveur maître qui gère le système de fichier et notamment les droits d’accès
aux fichiers. A cela s’ajoute des DataNodes, en général un par nœud dans le Cluster, qui gère le
stockage des données affectés au nœud sur lequel elle se trouve (Voir Figure III.2).
HDFS est conçu pour tourner sur des machines simples sous GNU/linux, et est programmé
en Java. Toute machine qui dispose de Java peut donc faire tourner un NameNode ou un
DataNode. Les nœuds communiquent entre eux via SSH. Il faut donc entrer la clé publique de
chaque DataNode dans le fichier authorized_keys du NameNode, afin qu’il puisse se connecter
aux autres nœuds via SSH sans avoir besoin de taper un mot de passe à chaque fois [9].
Figure III.2. Schéma HDFS
Le NameNode dispose d’un fichier de configuration dans lequel il entre l’adresse de chaque
machine sur laquelle tourne un DataNode, et se connecte ensuite à chacune de ces machines
36
via SSH au démarrage de HDFS. Par ailleurs, le NameNode est l’arbitre et le dépositaire de
toutes les métadonnées du HDFS. HDFS est conçu de telle sorte qu’aucune donnée de
l’utilisateur ne transite par le NameNode (voir Figure III.3). [9]
Dans Hadoop, les différents types de données, qu’elles soient structurées ou non, sont
stockées à l’aide du HDFS. Le HDFS va prendre les données en entrée et va ensuite les
partitionner en plusieurs blocs de données. Afin de garantir une disponibilité des données en
cas de panne d’un nœud, le système fera un réplica des données. Par défaut les données sont
répliquées sur trois nœuds différents, deux sur le même support et un sur un support
différent. Les différents nœuds de données peuvent communiquer entre eux pour rééquilibrer
les données (Figure III.3) [5].
Figure III.3: Réplication des données à l’aide du HDFS
HDFS est fait pour stocker de gros fichiers (chaque fichier est divisé en bloc de 64 MB par
défaut). D’après la documentation officielle, un fichier typique dans HDFS fait une taille de
l’ordre du GB voire du TB (1 TB = 1012 Octet = 1000 gigabytes) [W11]. HDFS est fait pour une
très grande scalabilité et tourne déjà en production sur des très gros Clusters (plus de 1000
machines) dans des sociétés comme Facebook ou Yahoo [9].
37
De plus HDFS est avant tout conçu pour être utilisé avec Hadoop (Figure III.4). La
philosophie de l’implémentation d’Hadoop repose sur le principe qu’il est plus efficace de
déplacer de la capacité de calcul que des donnés. HDFS fournit donc une interface pour
pouvoir déplacer le traitement des données au plus près de celles-ci.
Figure III.4. Hadoop Distributed File System (HDFS)
III.2.4. Le composant MapReduce
MapReduce est une technique qui permet d’effectuer des tâches sur de grandes
quantités de données en utilisant un cluster de machines. Elle est implémentée au cœur du
projet Hadoop.
MapReduce est le second composant majeur d’Hadoop qui gère la répartition et l’exécution
des requêtes sur les données stockées par le Cluster. Le Framework MapReduce est conçu
pour traiter des problèmes parallèlisables à très grande échelle en s’appuyant sur un très
grand nombre de nœuds. L’objectif de MapReduce et de son mécanisme avancé de
38
distribution de tâches est de tirer parti de la localité entre données et traitements sur le même
nœud de façon à minimiser l’impact des transferts de données entre les nœuds du Cluster sur
la performance [11].
Le moteur MapReduce de Hadoop réceptionne les jobs de la part des applications puis les
divise en une série de tâches, qu’il assigne ensuite aux différents nœuds de calcul [8]. Les jobs
MapReduce se structurent toujours autour de trois parties : deux classes static «Mapper» et
«Reduce», et une méthode main qui dirige l’application.
L’exécution des jobs se fait à l’aide d’un JobTracker et de Tasktrackers : lors de son exécution
le job est soumis au JobTracker qui s’occupe de le distribuer au Tasktracker qui tourne sur
chaque noeud. Le JobTracker choisit toujours les TaskTracker qui sont les plus proches de
l’emplacement de la donnée à traiter [9].
Une fois que la partie « Map » est terminée, c’est la partie Reduce qui commence à faire
remonter les différents résultats et les consolider en un seul résultat final (voir 5.2.3
fonctionnement de MapReduce) pour répondre à la requête du client (Figure III.5) [5].
Figure III.5. Fonctionnement de MapReduce dans Hadoop
39
III.3. HBASE
III.3. 1. Présentation de Hbase
HBase est un système de gestion de base de données NoSQL distribué, écrit en Java,
disposant d'un stockage structuré pour les grandes tables. Il est sous LicenceApache.
La société américaine Cloudera distribue une édition de Hadoop et HBase avec support
nommée Cloudera Enterprise.
HBase est utilisé par des acteurs comme Facebook pour stocker tous les messages de ce réseau
social, ce qui représentait en 2009 plus de 150 téraoctets de nouvelles données par mois [W6].
HBase est inspirée des publications de Google sur BigTable, de type base de données orientée
colonnes basées sur une architecture maître/esclave, et capable de gérer d'énormes quantités
d'informations (plusieurs milliards de lignes par table). Il s'installe généralement sur le
système de fichiers HDFS d'Hadoop pour faciliter la distribution. Il est utilisé lors d’un besoin
à un accès aléatoire pour lecture- écriture en temps réel au Big Data.
L'objectif de ce projet est l'hébergement de très Grandes tables des milliards de lignes et des
millions de colonnes. HBase conserve un grand nombre de fichiers ouverts en même temps
[12].
Mark Zuckerberg a annoncé le 15novembre2010 que Facebook allait désormais utiliser HBase
en remplacement de Cassandra [W7].
Parmi les points forts de Hbase, nous trouvons ; son utilisation pour le Big Data, sa solidité
de la conception et excellente tolérance au partitionnement. La propriété ACID est garantie
sur une ligne (c'est-à-dire plusieurs familles de colonnes) depuis HBase 0.92 [W6].
III.3. 2. Architecture de HBASE
Contrairement au SGBD orienté ligne (SGBD relationnel), les données sont stockées
sous forme de colonne. On retrouve deux types de composants pour HBase : le composant
maître appelé «HMaster», qui contient le schéma des tables de données, et les nœuds esclaves
appelés «Region Server», qui gèrent des sous-ensembles de tables, appelés « Region ».
40
HBase est généralement utilisé sur un ensemble de machines, ou cluster, et utilise le système
de fichier HDFS. Les données des tables sont stockées sur les nœuds « DataNode» (HDFS) par
les nœuds de type « Region Server »(HBASE).
La Figure III.6 présente le fonctionnement général d'HBase. Les tables sont stockées en
orientation par colonne. Chaque table est constituée d'un ensemble de familles de colonnes
(regroupements logiques de colonnes). Sur chaque famille de colonnes il est possible d'ajouter
des colonnes. Les lignes des tables sont partitionnées en plusieurs régions. Lors de la création
d'une table, une seule région est créée, elle est ensuite automatiquement divisée en sous-
parties lorsque sa taille atteint un seuil limite.
Le rôle du master est la gestion des régions. Zookeeper est un outil permettant de coordonner
des services distribués, c'est lui qui permettra de faire le lien entre le master et le système de
fichier distribué HDFS.
Figure III.6. Schéma de HBASE.
41
III.4. MONGODB
III.4.1. Présentation de MongoDB
MongoDB est une base de données orientée documents open-source qui fournit de
hautes performances, haute disponibilité, et une scalabilité automatique [15]. Développé
depuis 2007 par 10gen (une société de logiciel), MongoDB est un système de gestion de base
de données orientée document. Ecrit en C++ et distribué sous licence AGPL (licence libre), elle
est très adaptée aux applications Web. MongoDB a été adoptée par plusieurs grands noms de
l’informatique, tels que Foursquare, SAP, ou bien même GitHub [5].
MongoDB utilise des fichiers au format BSON, un dérivé du JSON. Comparé à ce dernier, le
BSON a été pensé pour faciliter le scan des données. Un enregistrement dans MongoDB est
un document, qui est une structure de données composée de paires de champs et de valeur.
Les valeurs des champs peuvent inclure d'autres documents, des tableaux et des tableaux de
documents [15].
Fonctionnant comme une architecture distribuée centralisée, il réplique les données sur
plusieurs serveurs avec le principe de maître-esclave, permettant ainsi une plus grande
tolérance aux pannes. La répartition et la duplication de document est faite de sorte que les
documents les plus demandés soient sur le même serveur et que celui-ci soit dupliqué un
nombre de fois suffisant [15].
Par sa simplicité d’utilisation du point de vue de développement client, ainsi que ces
performances remarquables, MongoDB est l’une de base de données orientées document la
plus utilisé [5].
III.4.2. Modèle de données
Le modèle de données de MongoDB est de type orienté documents. Un document,
l'unité basique de MongoDB, est un ensemble ordonné de paires clé-valeur. Il est identifié par
son nom.
Un ensemble de documents (et peut donc être vu comme une table SQL) forment ce que nous
appelons une collection. Les documents d'une collection peuvent avoir des formes très
différentes. MongoDB ne pose aucune restriction quant aux documents contenus dans une
même collection. A la différence d'une table SQL, le nombre de champs des documents d'une
même collection peut varier d'un document à l'autre.
42
Une base de données MongoDB est un conteneur pour les collections (tout comme une base
dedonnées SQL contient des tables) avec ses propres permissions [13].
III.4.3. Architecture
Il existe quatre différents modes de fonctionnement pour MongoDB [14]:
- Single : Le mode Single sert à faire fonctionner une base de données sur un seul
serveur.
- Replication Master / Slave : Dans Le mode Master/Slave ; le serveur fonctionne en
tant que maître et s'occupe des demandes des clients. En plus il s'occupe de répliquer
les données sur le serveur esclave de façon asynchrone. L'esclave est présent pour
prendre la place du maître si ce dernier se tombe en panne. L'avantage premier de
cette structure permet de garantir une forte cohérence des données, car seul le maître
s'occupe des clients. Aucune opération n'est faite sur l'esclave, hormis quand le maître
envoie les mise à jours [14].
- Replica Set : (Voir Figure III.7) Le Replica Sets fonctionne avec plusieurs nœuds
possédant chacun la totalité des données, de la même manière qu'un réplica. Ces
différents nœuds vont alors élire un nœud primaire, qui peut s'apparenter à un maître.
Il faut qu'un nœud obtienne la majorité absolue afin d'être élu. Dans le cas où un nœud
n'obtiendrait pas la majorité, le processus de vote recommencerait à zéro. De plus, une
priorité peut être donnée à chaque nœud afin de lui donner plus de poids lors de
l'élection. Un serveur arbitre peut être inséré dans le système. Ce dernier n'aura
aucune donnée mais participera aux élections afin de pouvoir garantir la majorité
absolue [14].
43
- Sharding : Le Sharding est une surcouche qui est basée sur du Master / Slave ou du
Replica Sets.
Les Shards : Ce sont un groupe de serveurs en mode Master / Slave ou Réplica
Sets.
Les mongos : Ce sont des serveurs qui savent quelles données se trouvent dans
quel Shard et leur donnent des ordres (lecture, écriture).
Les Config Servers : Ils connaissent l'emplacement de chaque donnée et en
informent les mongos. De plus, ils organisent la structure des données entre les
Shards.
Le Sharding sert à partager les données entre plusieurs Shard, chaque Shard devant
stocker une partie des données [14].
III.4.4. Le composant Mapreduce
Dans une opération de MapReduce, MongoDB applique la phase de map pour chaque
document d'entrée (les documents de la collection qui correspondent à la condition de
requête). La fonction map retourne des paires clé-valeur. Pour les clés qui ont plusieurs
valeurs, MongoDB applique la phase Reduce, qui recueille et condense les données agrégées.
MongoDB stocke ensuite les résultats dans une collection. En option, la sortie de la fonction
reduce peut passer à travers une fonction de finalisation traitement des résultats.
Toutes les fonctions de Mapreduce dans MongoDB sont des scripts Java qui sont exécutés
dans le processus de MongoDB. Les opérations Mapreduce prennent les documents d'une
unique collection comme entrée, et peuvent effectuer un tri arbitraire et de limitation avant de
commencer l'étape map. Mapreduce peut retourner les résultats d'une opération sous forme
d’un document, ou peut écrire les résultats dans des collections. Les collections d'entrée et de
la sortie peuvent être fragmentées.
En résumé, les opérations de MapReduce utilisent des fonctions JavaScript pour l’étape map,
et associe les valeurs à une clé. Si une clé a de multiples valeurs mappées à elle, l'opération
reduce réduit les valeurs de la clé à un seul objet. L'utilisation de fonctions JavaScript permet
la flexibilité des opérations Mapreduce [W8].
44
III.4.5. Réponse au CAP
MongoDB, de par son architecture dans un système distribué, et qui dans chaque mode utilise
toujours un nœud maître, a tendance à privilégier l'intégrité par rapport à la disponibilité [14].
MongoDB se différencie des bases de données relationnelles avec sa récupération automatique
d'erreurs dans le cas où un serveur maître viendrait à être indisponible, via le système
d'élection où les esclaves vont s'élire entre eux. Elle permet également de gérer des
transactions en deux phases et permet de revenir en arrière en cas d'erreur afin de garantir
l'isolation des données. De plus, de nombreux CMS (Content Management System) ont
également fait des portages sur MongoDB, car cette dernière se prête bien aux applications
Web [15].
III.5. YCSB : Le Benchmark Yahoo
Yahoo propose un outil très puisant (YCSB : Yahoo ! Cloud Serving Benchmark) qui se
présente comme une nouvelle méthodologie de bancs d'essais (benchmark en anglais) pour
les bases de données NoSQL sur Cloud.
YCSB est un excellent outil pour comparer les performances SGBD NoSQL. Il supporte
l’exécution des tests de chargement en parallèle des variables (benchmark), pour évaluer
l’insertion, la mise à jour, et la suppression des enregistrements.
Dans chaque test on peut configurer le nombre d'enregistrements à charger, le nombre
d’opérations à effectuer, et la proportion de lecture et d'écriture. Il est donc facile à utiliser
pour tester différents scénarios de charge d’enregistrements et d’opérations.
Les tests utilisent des charges de travail (Workload ) avec des paramètres de de référence
différents pour chaque Workload. Par exemple :
● Workload A: 50% de lectures, 50% de mises à jour.
● Workload B: 95% de lectures, 5% des mises à jour.
● Workload C: 100% de lectures.
● Workload F: simule read-modify-write.
● Workload D: insère des enregistrements, avec des lectures des données récemment insérées.
● Workload E: insère des enregistrements, et interroge les plages d'enregistrements.
Chaque Workload effectue généralement 1000 opérations et mesure la latence moyenne par
type d'opération, ainsi que le débit total de toutes les opérations. Ces Workload peuvent être
modifié et personnalisé suivant la nature des résultats attendues des tests.
45
III.6. Conclusion
Dans ce chapitre nous avons présenté les outils utilisés dans la partie implémentation et
expérimentation citée dans le chapitre IV. En l’occurrence, Hadoop, HBASE, MongoDB, et
YCSB.
Nous avons présenté l’architecture, les caractéristiques techniques et les composants de
chaque système. L’objectif était de donner aux lecteurs une idée sur ces outils, leur domaine
d’utilisation, et leur mode de fonctionnent ; afin de leur permettre le suivi et la compréhension
le fond de notre travail qui consiste à comparer les performances des systèmes SGBD NoSQL :
HBASE et MongoDB.
La comparaison de L’évaluation de performance l’analyse de résultat est présentée dans le
chapitre IV.
47
IV.1. Introduction
Ce chapitre est consacré aux étapes d’installation des composants Hadoop, HBASE et
MongoDB, et se termine avec une analyse des résultats obtenus à partir des tests, afin
d’arriver à une évaluation globale de performances.
Dans la première partie, vous trouverez les étapes d’installation de Hadoop, HBASE et
MongoDB, et l’outil de Benchmarking YCSB.
La deuxième partie est consacrée à l’analyse des résultats obtenus à partir de nos
expérimentations dans le cas d’une architecture Single Node.
Pour le second cas - l’architecture distribuée sur un Cloud Computing- nous avons fait une
analyse à partir d’une étude publiée et réalisée sur la base de tests effectués dans cet
environnement.
L’évaluation des performances va se porter sur deux niveaux :
1- Niveau 1 : temps d’exécution : il consiste à mesurer le temps d’exécution des
demandes lorsqu'une base de données est en charge (Workloads). La lenteur
d’exécution des demandes est fortement liée au débit du système SGBD NoSQL et
reste un obstacle pour augmenter la performance.
2- Niveau 2 : évolutivité: Le plus grand indice de vente chez les fournisseurs Cloud est
leur capacité à ajouter de nouveaux serveurs (nœuds) en cas de besoin. Le but est de
savoir l’impact d’évolutivité sur les performances des SGBD NoSQL.
IV.2. Première partie
IV.2.1. Installation de Hadoop, HBASE, MongoDB et YCSB
IV.2.1.1.Configuration
PC portable, HP Probook 4740s ;
Processeur : Intel Core i5-2450M CPU@2.50GHzx4
Type OS : 64 Bits
RAM : 6 Go
Disque : 732 Go
48
Système d’exploitation : Ubuntu 14.10
Hadoop 1.0.4
HBASE 0.94.8
MongoDB 2.6.7
YCSB 0.1.4
IV.2.1.2. Installation d’Hadoop en mode Single Node
Dans ce chapitre, nous allons montrer l’installation d’un cluster Hadoop Single-Node version
1.0.4 sur Ubuntu 14.10 LTS.
L’installation de Hadoop-1.0.4 est réalisé à en suivant les étapes suivantes :
1- Installation de JAVA.
Le composant java est un outil indispensable pour l’exécution des jobs Hadoop écrits sous
forme de javascript. Nous commençons par une mise à jour du système Ubuntu.
$ sudo apt-get update
Ensuite, nous avons installé la version récente de java à l’aide de la commande :
$ sudo apt-get install default-jdk
Et pour vérifier la version de java :
$ java -version
java version "1.7.0_65"
OpenJDKRuntimeEnvironment (IcedTea 2.5.3) (7u71-2.5.3-0ubuntu1)
OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)
Initialement ; les utilisateurs d’Hadoop doivent être définis. Afin de leurs attribuer les
permissions d’utilisation de Hadoop.
Pour cela, nous devons créer un groupe d’utilisateurs avec tous les droits sur Hadoop.
$ sudo addgroup hadoop
$ sudo adduser --ingroup hadoop hduser
Hduser est l’utilisateur crée dans notre cas pour gérer Hadoop.
La gestion des droits est très stricte dans les systèmes Linux. A cet effet ; la création d’une clé
SSH pour notre utilisateur hduser est obligatoire.
49
Création est installation des certificats SSH :
Hadoop nécessite un accès SSH pour gérer ses nœuds, c’est à dire les machines distantes ainsi
que notre machine locale.
Pour notre configuration à un nœud unique (Single Node) , nous avons donc besoin de
configurer l'accès SSH à localhost :
acef@pcubuntu01:~$ su - hduser
hduser@pcubuntu01:~$ ssh-keygen -t rsa -P ""
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hduser/.ssh/id_rsa):
Created directory '/home/hduser/.ssh'.
Your identification has been saved in /home/hduser/.ssh/id_rsa.
Your public key has been saved in /home/hduser/.ssh/id_rsa.pub.
The key fingerprint is:
9b:82:ea:58:b4:e0:35:d7:ff:19:66:a6:ef:ae:0e:d2 hduser@pcubuntu01
The key's randomart image is:
……..
Afin que Hadoop peut utiliser SSH sans demander un mot de passe à chaque accès ; nous
avons besoin d’ajouter la clé nouvellement créée à la liste des clés autorisées. Pour cela nous
devons taper la commande suivante :
hduser@pcubuntu01:~$ cat $HOME/.ssh/id_rsa.pub >>
$HOME/.ssh/authorized_keys
Nous pouvons vérifier si SSH fonctionne:
hduser@pcubuntu01:~$ ssh localhost
The authenticity of host 'localhost (::1)' can't be established.
RSA key fingerprint is
d7:87:25:47:ae:02:00:eb:1d:75:4f:bb:44:f9:36:26.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (RSA) to the list of known
hosts.
Pour installer Hadoop-1.0.4, nous l’avons téléchargé à partir du site Apache. Après l’extraction, le dossier hadoop est déplacé vers /usr/local.
$ cd /usr/local
$ sudo tar xzf hadoop-1.0.4.tar.gz
$ sudo mv hadoop-1.0.3 hadoop
$ sudo chown -R hduser:hadoop hadoop
Réglage des fichiers de paramètres
Les fichiers suivants devront être modifiés pour terminer la configuration d’Hadoop:
50
1. ~/.bashrc
2. /usr/local/hadoop/etc/hadoop/hadoop-env.sh
3. /usr/local/hadoop/etc/hadoop/core-site.xml
4. /usr/local/hadoop/etc/hadoop/mapred-site.xml.template
5. /usr/local/hadoop/etc/hadoop/hdfs-site.xml
1. ~/.bashrc:
Avant de modifier le fichier .bashrc dans notre répertoire personnel, nous devons trouver le
chemin où Java a été installée pour définir la variable d'environnement JAVA_HOME en
utilisant la commande suivante:
$ update-alternatives --config java
There isonly one alternative in link group java (providing
/usr/bin/java): /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java
Nothing to configure.
Maintenant, nous pouvons ajouter les lignes suivantes à la fin de ~ / .bashrc
# Set Hadoop-related environment variables
export HADOOP_HOME=/usr/local/hadoop
# Set JAVA_HOME (we will also configure JAVA_HOME directly for Hadoop
later on)
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
# Some convenient aliases and functions for running Hadoop-related
commands
unalias fs &> /dev/null
alias fs="hadoop fs"
unalias hls &> /dev/null
alias hls="fs -ls"
# If you have LZO compression enabled in your Hadoop cluster and
# compress job outputs with LZOP (not covered in this tutorial):
# Conveniently inspect an LZOP compressed file from the command
# line; run via:
#
# $ lzohead /hdfs/path/to/lzop/compressed/file.lzo
#
# Requires installed 'lzop' command.
#
lzohead () {
hadoop fs -cat $1 | lzop -dc | head -1000 | less
}
# Add Hadoop bin/ directory to PATH
export PATH=$PATH:$HADOOP_HOME/bin
2. /usr/local/hadoop/etc/hadoop/hadoop-env.sh
Nous devons définir JAVA_HOME en modifiant le fichier hadoop-env.sh :
51
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
L’ajout de la déclaration ci-dessus dans le fichier hadoop-env.sh assure que la valeur de la
variable JAVA_HOME sera disponible pour Hadoop chaque fois qu'il est mis en marche.
3. /usr/local/hadoop/etc/hadoop/core-site.xml:
Le fichier /usr/local/hadoop/etc/hadoop/core-site.xml contient les propriétés de
configuration utilisées par Hadoop au démarrage.
Premièrement nous devons créer un dossier de travail pour Hadoop.
$ sudo mkdir -p /app/hadoop/tmp
$ sudo chown hduser:hadoop /app/hadoop/tmp
# ...and if you want to tighten up security, chmod from 755 to 750...
$ sudo chmod 750 /app/hadoop/tmp
Ensuite il faut modifier le fichier /usr/local/hadoop/etc/hadoop/core-site.xml
<property>
<name>hadoop.tmp.dir</name>
<value>/app/hadoop/tmp</value>
<description>A base for other temporary directories.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:54310</value>
<description>The name of the default file system. A URI whose
scheme and authority determine the FileSystem implementation. The
uri's scheme determines the config property (fs.SCHEME.impl) naming
the FileSystem implementation class. The uri's authority is used
to
determine the host, port, etc. for a filesystem.</description>
</property>
4. /usr/local/hadoop/etc/hadoop/mapred-site.xml
Le fichier mapred-site.xml est utilisé pour spécifier dans quel cadre est utilisée MapReduce.
Nous devons entrer le contenu suivants dans le bloc <configuration></configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:54311</value>
52
<description>The host and port that the MapReduce job tracker runs
at. If "local", then jobs are run in-process as a single map
and reduce task.
</description>
</property>
5. /usr/local/hadoop/etc/hadoop/hdfs-site.xml
Le fichier /usr/local/hadoop/etc/hadoop/hdfs-site.xml doit être configuré pour chaque hôte
du cluster qui va l’utiliser. Il est utilisé pour spécifier les répertoires qui seront utilisés comme
NameNode et DataNode sur cette hôte.
Ouvrez le fichier et entrez le contenu suivant entre <configuration></ configuration> :
<property>
<name>dfs.replication</name>
<value>1</value>
<description>Default block replication.
The actual number of replications can be specified when the file is
created.
The default is used if replication is not specified in create time.
</description>
</property>
Formater le nouveau système de fichier HDFS pour Hadoop :
hduser@pcubuntu01:~$ /usr/local/hadoop/bin/hadoop namenode -format
L’écran suivant s’affiche :
.../hadoop-hduser/dfs/name has been successfully formatted.
************************************************************
SHUTDOWN_MSG: Shutting down NameNode at ubuntu/127.0.1.1
************************************************************/
6- Lancement d’Hadoop
Maintenant il est temps de démarrer le cluster Hadoop Single-Node nouvellement installé.
Nous pouvons lancer (start-dfs.sh et start-yarn.sh) ou start-all.sh.
hduser@pcubuntu01:~$ /usr/local/hadoop/bin/start-all.sh
53
Pour vérifier le bon fonctionnement d’Hadoop :
On tape la commande : jps
7- Et pour arrêter Hadoop :
hduser@pcubuntu01:~$ /usr/local/hadoop/bin/stop-all.sh
Par défaut, Hadoop est configuré avec des interfaces WEB afin de faciliter la gestion
de ces composants :
- http://localhost:50070/ – Web UI pour le NameNode
- http://localhost:50030/ – Web UI pour le JobTracker
- http://localhost:50060/ – Web UI pour le TaskTracker
55
http://localhost:50030/ – Web UI pour le JobTracker
http://localhost:50060/ – Web UI pour le TaskTracker
56
IV.2.1.3. Installation de HBASE
L’installation de HBASE est très facile à réaliser. Il faut choisir une version stable
conforme à la configuration disponible.
Les étapes à suivre pour effectuer l’installation :
1- Télécharger HBASE, version stable, depuis le site :
http://www.apache.org/dyn/closer.cgi/hbase/.
2- Extraire le fichier téléchargé dans le chemin /usr/local
$ cd /usr/local
$ sudo tar xzf hbase-0.90.4.tar.gz
$ sudo mv hbase-0.90.4 hbase
$ sudo chown -R hduser:hadoop hbase
3- Modifier le fichier ~/.bashrc en ajoutant les lignes :
# Set Hadoop-related environment variables
export HADOOP_HOME=/usr/local/hadoop
export HBASE_HOME=/usr/local/hbase
# Add Hadoop bin/ directory to PATH
export PATH=$PATH:$HADOOP_HOME/bin:$HBASE_HOME/bin
4- Modifier le fichier /usr/local/hbase/conf/hbase-site.xml
<configuration>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://localhost:54310/hbase</value>
<description>The directory shared by RegionServers.
</description>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
<description>The replication count for HLog and HFile
storage. Should not be greater
than HDFS datanode count.
</description>
</property>
</configuration>
5- Remarque : Il faut modifier le fichiers /etc/hosts pour éviter des erreurs de
fonctionnement da HBASE :
57
Modifier l’adresse IP de 127.0.1.1 pcubuntu01 à : 127.0.0.1 pcubuntu01
6- Lancer Hadoop avec la commande :
$start-all.sh
7- Lancer HBase avec la commande :
$start-hbase.sh
8- Vérifier le bon fonctionnement de HBase en tapant la commande : jps
9- La gestion des tables HBase se fait à l’aide de l’invite : hbase shell
$hbase shell
HBase Shell; enter 'help<RETURN>' for list of supportedcommands.
Type "exit<RETURN>" to leave the HBase Shell
Version 0.90.4, r1150278, Sun Jul 24 15:53:29 PDT 2011
hbase(main):001:0>create 'test','cf'
0 row(s) in 1.3890 seconds
hbase(main):004:0>list
TABLE
Test row(s) in 0.0120 seconds
58
L’interface WEB de HBASE est définit par l’adresse :
- http://localhost:60010
L’interface WEB offre toutes les informations utiles à propos de la base de données.
59
IV.2.1.4. Installation de MongoDB
Les étapes d’installation figurent dans la page WEB :
http://docs.mongodb.org/manual/tutorial/install-mongodb-on-linux/
L’installation dans le cas d’un système Linux 64 bits se résume dans les étapes suivantes :
1- Télécharger MongoDB :
curl -O http://downloads.mongodb.org/linux/mongodb-linux-x86_64-
2.6.7.tgz
2- Extraire le fichier téléchargé :
tar -zxvf mongodb-linux-x86_64-2.6.7.tgz
3- Copier le dossier mongodb-linux-x86_64-2.6.7 dans l’emplacement Mongodb :
mkdir -p mongodb
cp -R -n mongodb-linux-x86_64-2.6.7/ mongodb
4- Ajouter la ligne suivante au fichier ~/.bashrc
export PATH=/home/hduser/mongodb/bin:$PATH
5- Créer le dossier /data/db
mkdir -p /data/db
6- Lancer MongoDB avec la commande :
Mongod -rest
L’option –rest permet de lance l’interface WEB qui peut être obtenu par l’adresse :
60
- http://localhost:28017
- La liste des bases de donnée est affichée en cliquant sur listDatabases.
61
IV.2.1.5. Comparaison des propriétés système
Tableau 1: HBASE vs MongoDB [W9]
Propriétés HBASE MongoDB
Description Orienté Colonne basé sur
Apache Hadoop et les
concepsBigTable
Un des plus populaires des orientés
document
Website hbase.apache.org www.mongodb.org
Doc. technique hbase.apache.org docs.mongodb.org/manual
Développeur Apache Foundation MongoDB, Inc
Version initiale 2008 2009
License Open Source Open Source
Langage d’implém. Java C++
OS Linux, Unix, Windows Linux, OS X, Solaris, Windows
Modèle BD Orienté colonne Orienté Document
Indexes secondaires NON Oui
APIs et d’autre méthodes
d’accés
Java API, RESTful HTTP
API, Thrift
proprietaryprotocolusing JSON
Langages de
programmation supportés
C, C#, C++
Groovy, Java
PHP, Python, Scala
Actionscript, C, C#, C++
Clojure, ColdFusion, D,
Delphi, Erlang, Go, Groovy,
Haskell, Java, JavaScript,
Lisp, Lua, MatLab, Perl, PHP
PowerShell, Prolog, Python,
R, Ruby, Scala, Smalltalk
Méthode de
partitionnement
Sharding Sharding
Methode de replication selectablereplication factor Master-slave replication
MapReduce Oui Oui
62
IV.2.1.6. Installation de YCSB
1- Télécharger la source YCSB avec la commande :
~$ gitclone http://github.com/brianfrankcooper/YCSB.git
2- Accéder au dossier YCSB et compiler avec la commande :
/YCSB/ mvn clean package
3- Après la phase de compilation ; copier et extraire le fichier ycsb-0.1.4.tar.gz se trouvant
dans le dossier /YCSB/distribution/ vers un emplacement de votre choix
Exécution des tests avec l’outil YCSB.
Test de HBASE
- Pour tester HBase, nous commençons par la phase de chargement (Load process). Taper :
hduser@pcubuntu01:~/ycsb-0.1.4$ bin/ycsb load hbase -P
workloads/workloada -p columnfamily=f1 -p recordcount=600000 -s >
loadh.dat
Le message suivant s’affiche pour indiquer le temps d’exécution du chargement (Load
process).
Loading workload... Starting test. 0 sec: 0 operations; 10 sec: 131095 operations; 13108,19 current ops/sec; [INSERT AverageLatency(us)=68,84] 20 sec: 234099 operations; 10297,31 current ops/sec; [INSERT AverageLatency(us)=98,74] 30 sec: 369877 operations; 13577,8 current ops/sec; [INSERT AverageLatency(us)=72,27] 40 sec: 486927 operations; 11705 current ops/sec; [INSERT AverageLatency(us)=78,94] 50 sec: 561839 operations; 7490,45 current ops/sec; [INSERT AverageLatency(us)=138,5] 54 sec: 600000 operations; 8226,13 current ops/sec; [INSERT AverageLatency(us)=125,09]
- Pour l’exécution du Workload :
hduser@pcubuntu01:~/ycsb-0.1.4$ bin/ycsb run hbase -P workloads/workloada -p columnfamily=f1 -p recordcount=600000 -s > rha.datPour tester MongoDB avec YCSB :
63
- Le temps d’exécution des opérations est affiché dans l’écran :
Loading workload... Starting test. 0 sec: 0 operations; 2 sec: 1000 operations; 442,28 current ops/sec; [UPDATE AverageLatency(us)=87,59] [READ AverageLatency(us)=4199,08]
Test de MongoDB
- Pour tester MongoDB, nous commençons par Load process :
hduser@pcubuntu01:~/ycsb-0.1.4$ bin/ycsb load mongodb -P
workloads/workloada -p recordcount=600000 -s > loadm.da
- Le temps des opérations du chargement s’affiche à l’écran:
Loading workload...
Starting test.
0 sec: 0 operations;
10 sec: 35224 operations; 3517,12 current ops/sec; [INSERT
AverageLatency(us)=271,46]
20 sec: 69417 operations; 3417,59 current ops/sec; [INSERT
AverageLatency(us)=285,98]
30 sec: 103515 operations; 3409,46 current ops/sec; [INSERT
AverageLatency(us)=287,16]
40 sec: 134375 operations; 3086 current ops/sec; [INSERT
AverageLatency(us)=317,35]
…………………
110 sec: 341262 operations; 2663,43 current ops/sec; [INSERT
AverageLatency(us)=369,1]
120 sec: 374153 operations; 3289,1 current ops/sec; [INSERT
AverageLatency(us)=285,67]
130 sec: 405036 operations; 3087,99 current ops/sec; [INSERT
AverageLatency(us)=328,89]
140 sec: 436248 operations; 3121,2 current ops/sec; [INSERT
AverageLatency(us)=315,09]
150 sec: 467971 operations; 3171,98 current ops/sec; [INSERT
AverageLatency(us)=308,4]
160 sec: 495816 operations; 2784,5 current ops/sec; [INSERT
AverageLatency(us)=352,09]
170 sec: 520900 operations; 2508,15 current ops/sec; [INSERT
AverageLatency(us)=393]
180 sec: 554563 operations; 3366,3 current ops/sec; [INSERT
AverageLatency(us)=291,19]
190 sec: 586224 operations; 3165,78 current ops/sec; [INSERT
AverageLatency(us)=309,9]
194 sec: 600000 operations; 2944,85 current ops/sec; [INSERT
AverageLatency(us)=332,82]
64
- L’étape de l’exécution se lance après la commande :
hduser@pcubuntu01:~/ycsb-0.1.4$ bin/ycsb run mongodb -P
workloads/workloada -p recordcount=600000 -s > rma.dat
- Le résultat du test est le suivant :
Loading workload...
Starting test.
0 sec: 0 operations;
0 sec: 1000 operations; 1798,56 current ops/sec; [UPDATE
AverageLatency(us)=482,79] [READ AverageLatency(us)=279,77]
IV.3. Deuxième partie : Analyse des tests
IV.3.1. Introduction
Les objectifs ciblés dans ce chapitre sont les évaluations de performance de HBASE et
MongoDB qui sont analysés sur deux niveaux :
L’évaluation de performance dans une architecture nœud unique (Single Node).
Et l’évaluation de performance dans une architecture distribuée hébergée par un
environnement Cloud.
Dans le premier cas, nous avons réalisé nos expériences présentées dans ce chapitre sous
forme de test de scénarios (Benchmarks) en utilisant l’utilitaire YCSB. Ces tests sont exécutés
sur les bases de données HBASE et MongoDB.
Les résultats des tests sont notés et suivis par des explications et des commentaires.
Afin de renforcer la validation des résultats de nos expériences, nous avons pris comme cadre
de rapprochement les résultats publiés dans l’article « EXPERIMENTAL EVALUATION OF
NOSQL DATABASES » écrit par Veronika Abramova, Jorge Bernardino et Pedro Furtado
[16].
Les résultats obtenues par Veronika Abramova et son équipe dans leur article [16] sont en
global plus lentes par rapport à nos résultats. La configuration utilisée dans leur expérience
était: VM Ubuntu 32 bits 2 Go de RAM, hébergée dans un PC 32 bits Windows 7 avec 4 GO
RAM. Notre configuration était : Ubuntu 14.10, PC 64 Bits, i5 CORE, 6 GO RAM.
65
Pour le deuxième cas, celui de l’expérimentation dans un environnement distribué, et à cause
de la difficulté d’implémenter ce genre d’expériences, due au manque d’infrastructures Cloud
à notre niveau; nous nous somme limité uniquement sur les résultats publiés par DATASTAX
CORPORATION dans son livre blanc « Benchmarking Top NoSQLDatabases », publié en
février 2013 [17]. .
IV.3.2. Tests et analyse des résultats
IV.3.2.1. Première étude : Evaluation dans un Single Node Cluster
Initialisation
Nous avons commencé par initialiser l’outil YCSB avec 8 Workloads afin de rendre les
scénarios plus significatifs [16]:
• Workload A: Mise à jour lourde, se compose d'un rapport de 50% Read /50% Update ;
• Workload B: Lire Partiellement, Il consiste en un rapport de 95% Read /5% Update ;
• Workload C: Lecture seule, ce workload est 100% Read;
• Workload D: Ce Workload se compose de 95% Read /5% Insert ;
• Workload E: Se compose d'un rapport de 95% Scan /5% Insert ;
• Workload F: Ce workload se compose d'un rapport de 50% Read /50% Read-Modify-Write ;
• Workload G: Se compose d'un rapport de 5% Read /95% Update ;
• Workload H: Ce workload est composé de 100% Update.
Evaluation de performance
Dans ce paragraphe, nous présentons et analysons les résultats de chargement de 600000
enregistrements générés par YCSB. Nous présentons également le temps d'exécution des
Workloads enregistré pendant les opérations de lecture, écriture, et mises à jour.
Chargement de données (LoadProcess)
Nous commençons par l’étape de chargement des donnés (Load Process).
Les résultats obtenus après le lancement du Workload Load sont les suivants :
- Le journal de chargement généré par YCSB pour HBASE :
66
YCSB Client 0.1
Command line: -db com.yahoo.ycsb.db.HBaseClient -P
workloads/workloada -p columnfamily=f1 -p recordcount=600000 -s -load
[OVERALL], RunTime(ms), 54644.0
[OVERALL], Throughput(ops/sec), 10980.162506405095
[INSERT], Operations, 600000
[INSERT], AverageLatency(us), 88.99416833333333
[INSERT], MinLatency(us), 4
[INSERT], MaxLatency(us), 2639999
[INSERT], 95thPercentileLatency(ms), 0
[INSERT], 99thPercentileLatency(ms), 0
[INSERT], Return=0, 600000
[INSERT], 0, 599843
[INSERT], 1, 6
[INSERT], 2, 2
[INSERT], 999, 0
[INSERT], >1000, 10
- Le journal de chargement généré par YCSB pour MongoDB :
YCSB Client 0.1
Command line: -db com.yahoo.ycsb.db.MongoDbClient -P
workloads/workloada -p recordcount=600000 -s -load
new database url = localhost:27017/ycsb
mongo connection created with localhost:27017/ycsb
[OVERALL], RunTime(ms), 189957.0
[OVERALL], Throughput(ops/sec), 3158.6095800628564
[INSERT], Operations, 600000
[INSERT], AverageLatency(us), 310.31195
[INSERT], MinLatency(us), 65
[INSERT], MaxLatency(us), 2379463
[INSERT], 95thPercentileLatency(ms), 0
[INSERT], 99thPercentileLatency(ms), 0
[INSERT], Return=0, 600000
[INSERT], 0, 598502
[INSERT], 1, 132
[INSERT], 2, 66
[INSERT], 3, 7
[INSERT], 4, 3
[INSERT], 5, 2
[INSERT], 6, 0
…………
[INSERT], 997, 0
[INSERT], 998, 0
[INSERT], 999, 0
[INSERT], >1000, 5
67
Figure IV.1. Temps de chargement.
La Figure IV.1 montre les temps d'exécution pendant le chargement de 600000
enregistrements dans les deux bases de données. Nous avons constaté que durant le
chargement de 600000 enregistrements, le meilleurs temps d’insertion a été présenté par
HBASE avec un temps de chargement de seulement 54644,0 ms contre 189957,0 ms pour
MongoDB.
Cela signifie que HBASE était plus rapide que MongoDB pendant la phase de chargement. La
cause est le fait que HBASE ne nécessite pas de grande quantité de mémoire pendant
l’exécution des opérations de chargement initial. [16]
La figure suivante montre le résultat publié par Veronika Abramova et son équipe dans
l’article « EXPERIMENTAL EVALUATION OF NOSQL DATABASES ». [16] La différence de
performance entre les deux bases reste très proche de notre résultat. Dans la figure IV.1.1
HBASE était plus performant pendant le chargement.
0,0
20000,0
40000,0
60000,0
80000,0
100000,0
120000,0
140000,0
160000,0
180000,0
200000,0
MongoDB HBASE
Temps de chargement (ms)
SGBD NoSQL
Load process time (ms)
MongoDB 189957,0
HBASE 54644,0
68
Workload A (50%/50% de Read / Update )
- Le journal de l’exécution du Workload A par MongoDB :
YCSB Client 0.1
Command line: -db com.yahoo.ycsb.db.MongoDbClient -P
workloads/workloada -p recordcount=600000 -s -t
new database url = localhost:27017/ycsb
mongo connection created with localhost:27017/ycsb
[OVERALL], RunTime(ms), 533.0
[OVERALL], Throughput(ops/sec), 1876.172607879925
[UPDATE], Operations, 503
[UPDATE], AverageLatency(us), 398.9244532803181
[UPDATE], MinLatency(us), 207
[UPDATE], MaxLatency(us), 8803
[UPDATE], 95thPercentileLatency(ms), 0
[UPDATE], 99thPercentileLatency(ms), 1
[UPDATE], Return=0, 503
[UPDATE], 0, 496
[UPDATE], 1, 3
[UPDATE], 2, 0
…………….
……………
[READ], 999, 0
[READ], >1000, 0
- Le journal de l’exécution du Workload A par HBASE :
YCSB Client 0.1
Command line: -db com.yahoo.ycsb.db.HBaseClient -P
workloads/workloada -p columnfamily=f1 -p recordcount=600000 -s -t
[OVERALL], RunTime(ms), 2261.0
[OVERALL], Throughput(ops/sec), 442.2821760283061
[UPDATE], Operations, 492
[UPDATE], AverageLatency(us), 87.59349593495935
[UPDATE], MinLatency(us), 45
[UPDATE], MaxLatency(us), 358
[UPDATE], 95thPercentileLatency(ms), 0
[UPDATE], 99thPercentileLatency(ms), 0
[UPDATE], Return=0, 492
[UPDATE], 0, 492
[UPDATE], 1, 0
[UPDATE], 2, 0
[UPDATE], 3, 0
………..
[UPDATE], 999, 0
[UPDATE], >1000, 0
69
Figure IV.2. Temps d’exécution du Workload A.
La Figure IV.2. montre les résultats obtenus après l'exécution du Workload A qui se compose
de 50%d’opérations Read et 50% Update, effectuées sur 600000 enregistrements. Le nombre
d’opérations est limité à 1000. Nous remarquons que MongoDB et plus rapide par rapport à
HBASE. Mais Il faut voir les résultats du Workloads C et H pour confirmer le type de
dépassement, c’est-à-dire dépassement en Read ou en Update ou les deux en même temps.
Ci-dessus les résultats obtenus par Veronika Abramova et son équipe (Figure IV.3) [16].
SGBD NoSQL
Temps d'exécutions (ms)
MongoDB 533,0
HBASE 2261,0
70
0,0
500,0
1000,0
1500,0
2000,0
2500,0
3000,0
3500,0
MongoDB HBASE
Temps d'execution du Workload B (ms)
Workload B (95%/5% de Read / Update)
Figure IV.4. Temps d’exécution du Workload B.
La figure IV.4 montre les résultats obtenus lors de l'exécution du Workload B qui est
composé de 95% d’opération de Read et 5% Update, avec un total de 1000 opérations sur
600.000 enregistrements. Nous avons remarqué que MongoDB a donné de meilleurs résultats
par rapport à HBASE. La rapidité de MongoDB pendant les opérations de lecture est justifiée
par l’absence d'optimisation pour exécuter ce genre d’opération dans HBASE [16].
La figure suivante (Figure IV.5.) montre la différence de performance entre MongoDB et
HBASE présenté dans l’article de Veronika Abramova et son équipe [16], qui montre que
MongoDB est plus performant pendant l’exécution des opérations de lecture.
SGBD NoSQL
Temps d'exécution
(ms)
MongoDB 497,0
HBASE 3089,0
71
0,0
500,0
1000,0
1500,0
2000,0
2500,0
3000,0
3500,0
MongoDB HBASE
Temps d'execution du Workload C (ms)
Workload C (100% Read)
Figure IV.5. Temps d’exécution du Workload C
La figure IV.5 montre les résultats obtenus lors de l'exécution du Workload C qui consiste à
exécuter 1000 opérations de Read sur 600.000 enregistrements. Les résultats de l'exécution du
Workload C indiquent que HBASE est la base de données qui a montré un temps d'exécution
le plus lent pendant les opérations de lecture. Compte tenu de nombre d’enregistrements,
HBASE a montré une lenteur dans la lecture. HBASE est optimisée pour les opérations de
mise à jour. Pour la lecture, la partie des enregistrements à lire est stockée dans un autre
fichier et par conséquent le temps d’exécution des opérations Read est augmenté [16].
La figure suivante (figure IV.5.1) montre la différence de performance entre MongoDB et
HBASE présenté dans l’article de Veronika Abramova et son équipe [16], qui montre que
MongoDB est plus performant pendant l’exécution des opérations de lecture.
SGBD NoSQL
Temps d'exécution (ms)
MongoDB 501,0
HBASE 3114,0
72
Workload D (95% Read /5% Insert)
Figure IV.6. : Temps d’exécution du workload D.
HBASE est toujours lent pendant l’exécution des opérations de lecture (Figure IV.6).
MongoDB est plus performant. Ce test renforce et valide les résultats des Workloads
précédents.
Workload E (95% Scan /5% Insert)
Figure IV.7. Temps d’exécution du Workload E.
HBASE reste lent pendant l’exécution de Scan par rapport à MongoDB (Figue IV.7).
SGBD NoSQL
Temps d'exécution (ms)
MongoDB 564,0
HBASE 2329,0
SGBD NoSQL
Temps d'exécution (ms)
MongoDB 1417,0
HBASE 5015,0
0,0
500,0
1000,0
1500,0
2000,0
2500,0
MongoDB HBASE
Temps d'execution du Workload D (ms)
0,0
1000,0
2000,0
3000,0
4000,0
5000,0
6000,0
MongoDB HBASE
Temps d'execution du workload E (ms)
73
Workload F (50% Read /50% Read-Modify-Write )
Figure IV.8. Temps d’exécution de Workload F.
La Figure IV.8 montre les résultats obtenus après l'exécution du Workload F qui est Read/
Read-Modify-Write. 1000 opérations ont été exécutées sur 600000 enregistrements stockés.
Dans ce Workload les enregistrements sont lus en premier lieu, mis à jour après et ensuite
sauvegardés. Nous constatons que HBASE a montré une performance inférieure en raison de
ca difficulté de lecture par rapport à la mise à jour [16].
La figure suivante (figure IV.9) montre les résultats donnée par l’article [16].
SGBD NoSQL
Temps d'exécution
(ms)
MongoDB 716,0
HBASE 2615,0
0,0
500,0
1000,0
1500,0
2000,0
2500,0
3000,0
MongoDB HBASE
Temps d'execution de workload F (ms)
74
Workload G (5% Read /95% Update)
Figure IV.10. Temps d’exécution du Workload G
La Figure IV.10 montre les résultats obtenus lors de l'exécution du Workload G sur 600000
enregistrements, avec 1000 opérations effectuées (5% de Read et 95% Update). HBASE a
montré une meilleure performance grâce à son utilisation d’un journal où toutes les
transactions sont écrites en mode ajout au départ avec un enregistrement préalable des
opérations jamais réalisés.
La figure suivante montre les résultats obtenus par Veronika Abramova et son équipe publiés
dans l’article [16]. La différence de performance entre HBASE et MongoDB se coïncide avec
nos résultats (figure IV.11). Ce qui renforce la validité de nos expérimentations.
SGBD NoSQL
Temps d'exécution (ms)
MongoDB 2831,0
HBASE 799,0
0,0
500,0
1000,0
1500,0
2000,0
2500,0
3000,0
MongoDB HBASE
Temps d'execution du workload G (ms)
75
Workload H (100% Update)
Figure IV.12. Temps d’exécution du Workload H.
La Figure IV.12 montre les résultats de l'exécution du Workload H (100% update) avec 1000
opérations de mises à jour dans une base de données de 600000 enregistrements.
HBASE a montré un meilleur résultat par rapport à MongoDB. Cela est dû à la performance
de HBASE dans les opérations de mise à jour [16].
MongoDB utilise un mécanisme de verrouillage pour effectuer les opérations de mise à jour
[16], ce qui augmente le temps d'exécution des opérations de mise à jour.
La figure suivante (figure IV.13) confirme nos résultats de l’exécution de Workload H.
Hbase figure le plus rapide pendant la mise à jour.
SGBD NoSQL
Temps d'exécution (ms)
MongoDB 13974,0
HBASE 8943,0
0,0
2000,0
4000,0
6000,0
8000,0
10000,0
12000,0
14000,0
16000,0
MongoDB HBASE
Temps d'execution (ms)
76
0,0
5000,0
10000,0
15000,0
20000,0
25000,0
30000,0
MongoDB HBASE
Temps global d'exécution
Temps d’exécution global de l’ensemble des Workloads (A + B + C + F + G + H)
Figure IV.14. Temps global d’exécution.
La Figure IV.14 montre le total des temps d'exécution de l’ensemble des Workloads (A + B +
C + F + G + H). La vue globale des résultats montre que MongoDB est plus performant par
rapport à HBASE.
IV.3.2.2. Evaluation globale de HBASE et MongoDB dans un Single Node Cluster
A partir des résultats vus précédemment, nous avons constaté les points suivants :
HBASE a montré sa performance pendant les opérations d’insertion et mise à jour.
HBASE utilise un journal pour stocker toutes les modifications effectuées, ce qui
augmente la performance de mise à jour [16].
D’autre part, MongoDB a été plus performant dans l’exécution des opérations de
lecture et de Scan.
MongoDB est la base de données qui a montré une durée d'exécution plus grande
proportionnelle au nombre de mises à jour. Cette base de données utilise des
mécanismes de verrouillage qui augmentent le temps d'exécution de mise à jour. Mais
d’'autre part, la cartographie des registres de MongoDB dans la mémoire augmente la
performance de lecture [16].
SGBD NoSQL
Temps global d’exécution (ms)
MongoDB 21033,0
HBASE 28165,0
77
IV.3.3. Deuxième cas : Environnement distribué (Cloud)
En plus de nos expérimentations sur les SGBD NoSQL dans un environnement
SingleNode Cluster, et afin d’arriver à une évaluation de performance significative, nous
avions besoin d’étudier les capacités de HBASE et MongoDB dans un environnement Cloud
caractérisé par un traitement de Big Data.
Le Cloud Computing est l’environnement dédié à l’exploitation des systèmes de gestion de
bases de données NoSQL basées sur l’architecture distribuée qui traitent de grandes masses
de données.
L’insuffisance des moyens techniques nous a poussé à chercher d’autres références ayants
une haute crédibilité scientifique relatives à notre sujet. Le livre blanc « Benchmarking Top
NoSQLDatabases » publié par DataStax en Février 2013 [17] fournit une profonde étude sur
l’évaluation de performance de plusieurs bases de données NoSQL.
Ce livre blanc est le fruit d’une étude menée par End Point Corporation, une société de conseil
et de base de données Open-source, pour le compte de DataStax. L’objectif était d’effectuer des
Benchmarks sur trois différentes SGBD NoSQL : Cassandra, HBASE et MongoD [17].
Le livre blanc « Benchmarking Top NoSQLDatabases » présente les résultats obtenues à partir
des tests de Benchmarking sur Cassendra, HBASE et MongoDB dans un environnement
Cloud. Les résultats sont publiés sous forme de tableaux de mesures avec des graphes.
Pour notre étude de cas, nous nous étions limités uniquement sur les résultats relatifs à
HBASE et MongoDB.
Configuration initiale
End Point a dirigé le test sur Amazon Web Services instances EC2 qui est un service Cloud. Et
pour plus d’exactitude, les tests ont été effectués trois fois différentes dans trois jours
différents. Chaque test est effectué dans une nouvelle instance AWS [17].
Les tests ont été réalisés exclusivement sur les instances de type m1.xlarge (15 Go de RAM et
4 cœurs CPU), avec un stockage local de l’instance pour plus de performance [17] .
Les instances AMI (Amazon Machine Image) utilisent Ubuntu 12.04 LTS avec Oracle Java 1.6
installé.
Configuration de HBASE :
L’instance HBASE utilise la version stable 0.94.3 de HBASE et la version stable Hadoop 1.1.1
installé à partir de http://archive.apache.org/dist/hadoop/core/hadoop-1.1.1/,
78
Configuration de MongoDB :
La version stable 2.2.2 a été installée dans l’instance MongoDB, à partir de
http://downloads-distro.mongodb.org/repo/ubuntu-upstart.
Les Workloads testés :
1. Read-mostly workload, basé sur YCSB’sworkload B: 95% Read / 5% Update
2. Read/write combination, basé sur YCSBsworkload A: 50% Read / 50% Update.
3. Write-mostly workload: 99% update/ 1% Read.
4. Read/scan combination: 47% Read, 47% de Scan, 6% Update.
5. Read/write combination with scans: 25% Read, de 25% Scan, 25% Update, 25% Insert.
6. Read latest workload, basé sur YCSB workload D: 95% Read / 5% Insert.
7. Read-modify-write, basé sur YCSB workload F: 50% Read 50% de Read-modify-write.
Pour chaque enregistrement, le nombre de champs est fixé à 20 afin d’avoir 2 KB par
enregistrement. Le nombre d’opérations est limité à 900000. Le nombre d’enregistrement a été
calculé sur la base du nombre d'instances de données demandées pour le test. 15M
d’enregistrements (de 30 Go) par DataNode.
Résultats de Chargement de données (Loading data).
79
Pour le processus de chargement (Figure IV.15.), MongoDB n’était pas capable de s’adapter
efficacement à l’état de 32 nœuds. Par contre, HBASE montre une meilleure performance
lorsque le nombre de nœuds augmente.
Workload B: (Read-mostlyworkload)
Pour le Read-mostly Workload, (Figure IV.16), nous constatons que les deux bases de données
avaient presque la même performance avec une petite déférence, mais HBASE reste toujours
le plus performant. Au-delà de 16 nœuds la divergence entre les deux systèmes commence à
s’approfondir au profil de HBASE.
80
Read/Write Mix Workload (Workload A).
Dans le cas Read/write mix Workload (50%/50%) ; HBASE se trouve dans un classement
supérieur à celui de MongoDB (Figure IV.17).
A partir de 8 nœuds, la performance de HBASE augmente, et arrive à un état très supérieur
quand le nombre de nœud atteint les 32.
81
Write-mostly Workload
Les résultats du workload Write-mostly (Figure IV.18) montrent que HBASE et plus rapide
pendant l’exécution des opérations d’écriture. HBASE dépasse largement MongoDB à partir
de 4 nouds.
82
Read/Scan Mix Workload
Les résultats du Read/Scan Mix Workload (Figure IV.19) montrent que HBASE et plus rapide
l’exécution des opérations de lecture/Scan. HBASE dépasse largement MongoDB à partir de 4
nouds. La différence est importante lorsque le nombre de nœuds atteint les 32.
83
Write / Scan Mix Workload
Figure IV.20. Nombre d’opérations/sec pour Write/Scan Mix Workload [17]
HBASE reste toujours le meilleur quand le nombre de nœuds augmente (Figure IV.20).
84
Temps d’exécution de lecture pour l’ensemble les Workloads
Pour le cas de temps d’exécution (Figure IV.21) de lecture, le meilleur est celui qui montrent le
moins de temps. Nous avons constaté que les temps d’exécution consacré à la lecture par
chacune des bases de données HBASE et MongoDB se rapprochent l’une de l’autre pour
l’ensemble des Workloads.
Sauf dans les cas de 8 nœuds et 32 nœuds où MongoDB se montre plus performant pendant
la lecture.
85
Temps d’exécution pour l’insertion (pour l’ensemble des Workloads)
Mais dans le cas de l’insertion HBASE a été observé beaucoup plus rapide par rapport à
MongoDB (Figure IV.22). Et la divergence augmente proportionnellement par rapport au
nombre de nœuds.
86
Temps d’exécution pour Update (pour l’ensemble les Workloads)
Pour le cas de mise à jour (Figure IV.23), HBASE a été constaté beaucoup plus performant par
rapport à MongoDB.
87
Temps d’exécution de Scan pour l’ensemble des workloads
Figure IV.24. Temps d’exécution des opérations de Scan. [17]
Dans cette expérience, HBASE a montré une stabilité et rapidité d’exécution des opérations de
Scan, et restait plus performant par rapport à MongoDB (Figure IV.24)
D’une autre part, la performance de MongoDB augmente proportionnellement par rapport
aux nombre de nœuds, mais resterait mois performante par rapport à HBASE.
Evaluation Global dans le cas d’un environnement Cloud :
Le constat principal marqué après la consultation des résultats de l’ensemble des tests réalisés
par End Point Corporation sur les bases de données HBASE et MongoDB, se montre favorable
au profil de HBASE qui a été performant sur l’ensemble des tests dans un environnement
distribué avec un nombre important de nœuds hébergés par un service Cloud.
88
IV.4. Conclusion :
Les tests réalisés dans ce chapitres ont aidé à connaitre des résultats intéressants liés à la
performance de deux différents types de bases de données NoSQl, orienté colonne (HBASE),
et orienté document (MongoDB).
La diversité des environnements réservés aux tests, Single Node et distribué, a enrichi la base
de résultats et a permis une meilleure analyse.
Dans le premier cas, le Single Node, nous avons constaté que MongoDB et globalement plus
performant par rapport à HBASE pendant la lecture, Scan et lecture/ écriture.
HBASE de son coté, était performant pendant l’insertion et la mise à jour.
Mais dans le cas d’une architecture distribuée (Cloud) caractérisé par un nombre important de
nœuds ; nous avons remarqué que HBASE a montré de bons résultats lorsque le nombre de
nœuds dépassent les 8 nœuds. Nous constatons donc que HBASE reste la bonne solution à
choisir entre ces deux systèmes SGBD NoSQL en cas d’une solution distribuée.
89
CONCLUSION GENERALE
L’objectif de ce travail était de comparer les performances de HBASE et MongoDB.
Deux systèmes de gestion de bases de données Not Only SQL. Nous avons commencé, dans
le premier chapitre, par définir les thèmes liés à ce travail. Précisément, nous avons présenté
les concepts de Big Data et de Cloud Computing.
Avant d’entamer la phase d’implémentation et expérimentation des solutions choisies pour
l’évaluation de performance, nous avons jugé important de faire connaitre deux concepts;
NoSQL et Mapreduce. Le deuxième chapitre était consacré à des notions préliminaires sur ces
concepts.
Dans le troisième chapitre nous avons défini les caractéristiques de Hadoop, HBASE et
MongoDB. L’utilité de Hadoop était d’implémenter le système de fichiers HDFS pour faciliter
l’exploitation de HBASE.
Nous avons présenté à la fin du chapitre III l’outil Yahoo YCSB utilisé dans notre travail
pour tester les bases de données NoSQL HBASE et MongoDB.
Le quatrième chapitre était consacré à l’implémentation. Nous avons donné les étapes
d’installation de Hadoop, HBASE, MongoDB et YCSB. Ensuite, nous avons présenté les
résultats obtenus après l’élaboration des tests avec YCSB. La comparaison de performance
entre HBASE et MongoDB a été faite par démonstration de graphes contenant les mesures
trouvées, et suivi par des commentaires argumentant les résultats.
Nous estimons qu’avec la domination de l’Internet dans presque tous les secteurs, industriels,
medias, communication, et même familial, les technologies de Big Data sont aujourd’hui en
plein essor. Dans les prochaines années, nous estimons que ces technologies seront de plus en
plus utilisées pour répondre à de nouvelles problématiques pour la gestion de données. Nous
avons constaté que les systèmes NoSQL sont des solutions idéales pour gérer les grands
volumes de données qui caractérisent le Big Data.
En étudiant HBASE et MongoDB dans ce projet, nous avons conclu que le choix d’une
utilisation de chaque SGBD parmi les deux dépend de la réalité de la situation dans laquelle
se trouvent les données. En effet le type de données et leur traitement sont des indices
important pour définir laquelle des deux solutions utiliser. La fréquence estimée de lecture,
écriture, la mise à jour, et la taille des données sont les facteurs essentiels pour la sélection des
solutions NoSQL.
90
PERSPECTIVES
Actuellement la tendance vers une favorisation d’une solution NoSQL précise est loin d’être
réalisée à cause de nombre important de systèmes de gestion de base de données NoSQL
existants. Plusieurs solutions open-source et payantes sont présentées aux acteurs des
différents secteurs liés au Big Data.
A ce propos, une comparaison entre les différentes familles des solutions NoSQL, clé valeur,
orienté documents, orienté colonne et orienté graphe, dans un environnement Cloud ; restera
comme un travail très recommandé qui peut apporter une aide et un support aux intéressés
de Big Data et de Cloud Computing.
91
Référence :
- Livres électroniques
[1] SRS Day,Rapport d’étude sur le Big Data, SRS Day 2012.
[2] Alex Popescu “Big Data Causes Concern and Big Confusion. A Big Data
definition to Help Clarify the Confusion”, 27 Fevrier 2012.
[3] Stefane Fermigier, BIG DATA & OPEN SOURCE: UNE CONVERGENCE
INÉVITABLE, 2012.
[4] Olivier BENDAVID, Bi in the Cloud, 18/06/10.
[5] Adriano Girolamo PIAZZA, NoSQL Etat de l’art et benchmark Travail, 2013
[6] Matteo DI MAGLIE, Adoption d’une solution NoSQL dans l’entreprise, 12
septembre 2012.
[7] KOUEDI Emmanuel, Approche de migration d’une base de données
relationnelle vers une base de données NoSQL orientée colonne, 2012.
[8] Intel Corporation, Maîtriser les technologies Big Data pour
obtenir des résultats en quasi-temps réel, 2013.
[9] Julien Gerlier et Siman Chen,
Prototypage et évaluation de performances d’un service de traçabilité avec une
architecture distribuée basée sur Hadoop, 2011
[10] Mickaël CORINUS, Rapport d’étude sur le Big Data, 2012
[11] TechTarget, Tout savoir sur Hadoop : Vulgarisation de la technologie et les
stratégies de certains acteurs, 2014
[12] Yifeng Jiang, HBase Administration Cookbook, Août 2012
[13] Nicolas Degroodt, L'élasticité des bases de données sur le cloud computing, 2011.
[14] Lionel HEINRICH, Architecture NoSQL et réponse au Théorème CAP, 26 octobre 2012
[15] Mongodb Org., MongoDB Documentation Release 2.6.7, 13 Janvier 2015.
[16] EXPERIMENTAL EVALUATION OF NOSQL DATABASES, Veronika Abramova1,
Jorge Bernardino1,2 and Pedro Furtado2, International Journal of Database
Management Systems, Vol.6, No.3, June 2014.
92
[17] Benchmarking Top NoSQL Databases, White Paper by DATASTAX CORPORATION,
Février 2013.
- Sites internet [W1] http://fr.wikipedia.org/wiki/big_data, 20/12/2014
[W2] http://fr.wikipedia.org/wiki/Transaction_informatique, 02/02/2014.
[W3] http://blog.xebia.fr/2010/04/21/nosql-europe-tour-dhorizon-des-bases-de-donnees-
nosql/, Avril 2012
[W4] http://fr.wikipedia.org/wiki/MapReduce, 28/11/2014.
[W5] http://blog.inovia-conseil.fr/, 28/11/2014
[W6] http://hbase.apache.org/, 28/11/2014
[W7] http://www.journaldunet.com/developpeur/outils/comparatif-des-bases-nosql/,
20/12/2014
[W8] http://fr.wikipedia.org/wiki/HBase, 20/12/2014
[W9] http://docs.mongodb.org/manual/, 20/12/2014
[W10] http://db-engines.com/en/system/HBase%3BMongoDB ; 25/01/2015.
[W11] http://en.wikipedia.org/wiki/Terabyte
93
Résumé
Le Big Data est un ensemble de technologies basées sur les bases de données NoSQL
qui permettent de traiter de très grands volumes de données informatiques. Les bases NoSQL
sont de nouvelles bases de données qui ont vu le jour pour la plupart il y a 5 ou 6 ans. Il sont
vu par les grandes entreprises du domaine informatique comme de nouvelles solutions
permettant de répondre à leurs besoins d'évolutivité.
Le but de ce travail est d'expliquer l'architecture des différentes bases NoSQL
disponibles sur le marché. Et de voir d’une façon plus approfondi deux d’entre elles, HBASE
et MongoDB, pour arriver à une analyse de performance utile en utilisant YCSB, un outil très
connus pour sa puissance de test et utilisé dans plusieurs travaux d’évaluation des bases de
données NoSQL. La finalité est de connaître les performances de chacun de deux bases de
donnés et d’effectuer une comparaison à partir des résultats des tests générés par YCSB.