MapReduce
MapReduce est un patron de conception de développement informatique, inventé par Google[1], 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 à un téraoctet.
Les termes « map » et « reduce », et les concepts sous-jacents, sont empruntés aux langages de programmation fonctionnelle utilisés pour leur construction (map et réduction de la programmation fonctionnelle et des langages de programmation tableau).
MapReduce permet de manipuler de grandes quantitĂ©s de donnĂ©es en les distribuant dans un cluster de machines pour ĂȘtre traitĂ©es. Ce modĂšle connaĂźt un vif succĂšs auprĂšs de sociĂ©tĂ©s possĂ©dant d'importants centres de traitement de donnĂ©es telles Amazon.com ou Facebook. Il commence aussi Ă ĂȘtre utilisĂ© au sein du Cloud computing. De nombreux frameworks ont vu le jour afin d'implĂ©menter le MapReduce. Le plus connu est Hadoop qui a Ă©tĂ© dĂ©veloppĂ© par Apache Software Foundation. Mais ce framework possĂšde des inconvĂ©nients qui rĂ©duisent considĂ©rablement ses performances notamment en milieu hĂ©tĂ©rogĂšne. Des frameworks permettant d'amĂ©liorer les performances de Hadoop ou les performances globales du MapReduce, tant en termes de vitesse de traitement qu'en consommation Ă©lectrique, commencent Ă voir le jour.
Présentation
Un modĂšle de programmation
MapReduce est un modĂšle de programmation popularisĂ© par Google. Il est principalement utilisĂ© pour la manipulation et le traitement dâun nombre important de donnĂ©es au sein dâun cluster de nĆuds.
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 le 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 Map qui Ă un couple (clĂ©, valeur) associe un ensemble de nouveaux couples (clĂ©, valeur) : map(clĂ©1,valeur1) â list(clĂ©2,valeur2)
// En pseudo code cela donnerait Map(void * document) { int cles = 1; foreach mot in document calculIntermediaire(mot, 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.
Ă 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))â valeur2[2]// En pseudo code cela donnerait Reduce(int cles, Iterator values) { int result = 0; foreach v in values result += v; }
Un cluster MapReduce utilise une architecture de type MaĂźtre-esclave oĂč un nĆud maĂźtre dirige tous les nĆuds esclaves.
MapReduce possÚde quelques caractéristiques[3] :
- Le modĂšle de programmation du MapReduce est simple mais trĂšs expressif. Bien quâil ne possĂšde que deux fonctions, map() et reduce(), elles peuvent ĂȘtre utilisĂ©es pour de nombreux types de traitement des donnĂ©es, les fouilles de donnĂ©es, les graphes⊠Il est indĂ©pendant du systĂšme de stockage et peut manipuler de nombreux types de variable.
- Le systĂšme dĂ©coupe automatiquement les donnĂ©es en entrĂ©e en bloc de donnĂ©es de mĂȘme taille. Puis, il planifie lâexĂ©cution des tĂąches sur les nĆuds disponibles.
- Il fournit une tolĂ©rance aux fautes Ă grain fin grĂące Ă laquelle il peut redĂ©marrer les nĆuds ayant rencontrĂ© une erreur ou affecter la tĂąche Ă un autre nĆud.
- La parallélisation est invisible à l'utilisateur afin de lui permettre de se concentrer sur le traitement des données[4]
Une fois qu'un nĆud a terminĂ© une tĂąche, on lui affecte un nouveau bloc de donnĂ©es. GrĂące Ă cela, un nĆud rapide fera beaucoup plus de calculs qu'un nĆud plus lent. Le nombre de tĂąches Map ne dĂ©pend pas du nombre de nĆuds, mais du nombre de blocs de donnĂ©es en entrĂ©e. Chaque bloc se fait assigner une seule tĂąche Map. De plus, toutes les tĂąches Map n'ont pas besoin d'ĂȘtre exĂ©cutĂ©es en mĂȘme temps en parallĂšle, les tĂąches Reduce suivent la mĂȘme logique. Par exemple, si des donnĂ©es en entrĂ©e sont divisĂ©es en 400 blocs et qu'il y a 40 nĆuds dans le cluster, le nombre de tĂąches Map sera de 400. Il faudra alors 10 vagues de Map pour rĂ©aliser le mapping des donnĂ©es[4] - [5].
Le MapReduce est apparu en 2004. La technologie est encore jeune. Elle souffre de quelques points faibles[6] :
- Elle ne supporte pas les langages haut niveau comme le SQL
- Elle ne gÚre pas les index. Une tùche MapReduce peut travailler une fois les données en entrée stockées dans sa mémoire. Cependant, MapReduce a besoin d'analyser chaque donnée en entrée afin de la transformer en objet pour la traiter, ce qui provoque des baisses de performance.
- Elle utilise un seul flot de données. MapReduce est facile à utiliser avec une seule abstraction mais seulement avec un flot de donnée fixe. Par conséquent, certains algorithmes complexes sont difficiles à implémenter avec seulement les méthodes map() et reduce(). De plus, les algorithmes qui requiÚrent de multiples éléments en entrée ne sont pas bien supportés car le flot de données du MapReduce est prévu pour lire un seul élément en entrée et génÚre une seule donnée en sortie.
- Quelques points peuvent rĂ©duire les performances de MapReduce. Avec sa tolĂ©rance aux pannes et ses bonnes performances en passage Ă l'Ă©chelle, les opĂ©rations de MapReduce ne sont pas toujours optimisĂ©es pour les entrĂ©es/sorties. De plus, les mĂ©thodes map() et reduce() sont bloquantes. Cela signifie que pour passer Ă l'Ă©tape suivante, il faut attendre que toutes les tĂąches de l'Ă©tape courante soient terminĂ©es. MapReduce n'a pas de plan spĂ©cifique d'exĂ©cution et n'optimise pas le transfert de donnĂ©es entre ces nĆuds.
Distribution et fiabilité
MapReduce tire sa fiabilitĂ© de la rĂ©partition, sur chaque nĆud du rĂ©seau, des opĂ©rations Ă appliquer au jeu de donnĂ©es ; le dĂ©veloppeur s'attend Ă ce que chaque nĆud retourne pĂ©riodiquement le travail accompli et les modifications de statut. Si un nĆud ne retourne rien pendant cet intervalle, le nĆud maĂźtre (appelĂ© NameNode en Hadoop) (similaire au serveur maĂźtre du Google File System) considĂšre le nĆud comme mort, et envoie les donnĂ©es affectĂ©es Ă ce nĆud Ă d'autres nĆuds. Les opĂ©rations individuelles utilisent des opĂ©rations atomiques pour les nommages des fichiers de sortie comme une vĂ©rification double pour s'assurer qu'il n'y a aucun conflit parallĂšle avec un thread en cours ; quand les fichiers sont renommĂ©s, il est aussi possible de les copier sous un autre nom en plus du nom de la tĂąche (permis pour les effets de bords).
Les opĂ©rations de rĂ©duction fonctionnent sensiblement de la mĂȘme maniĂšre, mais en raison de leurs propriĂ©tĂ©s infĂ©rieures concernant les opĂ©rations concurrentes, le nĆud maĂźtre tente de programmer les opĂ©rations de rĂ©ductions sur le mĂȘme nĆud, ou aussi proche possible du nĆud dĂ©tenant les donnĂ©es qui doivent ĂȘtre traitĂ©es. Cette propriĂ©tĂ© est prĂ©fĂ©rĂ©e par Google car elle ne nĂ©cessite pas de bande passante supplĂ©mentaire. Ceci est un avantage car la bande passante est souvent limitĂ©e dans les rĂ©seaux internes aux entreprises.
Les facteurs de performance
D'aprÚs une étude[7] de 2010 de l'Université nationale de Singapour, il existe cinq facteurs qui influent sur les performances du MapReduce.
Le modĂšle de programmation MapReduce a Ă©tĂ© conçu pour qu'il soit indĂ©pendant du systĂšme de stockage des donnĂ©es. Il lit les paires <clĂ©, valeur> Ă l'aide d'un lecteur. Le lecteur rĂ©cupĂšre chaque enregistrement contenu dans le systĂšme de stockage, puis il les place dans une paire <clĂ©, valeur> afin de pouvoir les traiter lors de MapReduce. Bien que MapReduce ne dĂ©pende pas d'un systĂšme de stockage particulier, il Ă©prouve des difficultĂ©s lorsque le systĂšme de stockage est une base de donnĂ©es. Les systĂšmes de bases de donnĂ©es parallĂšles commerciaux utilisent un moteur pour exĂ©cuter les requĂȘtes et un moteur de stockage. Pour exĂ©cuter une requĂȘte, le moteur de requĂȘtes lit directement les donnĂ©es depuis le moteur de stockage. MapReduce doit d'abord lire la valeur, puis la stocker dans une paire Ă l'aide du lecteur, ce qui explique pourquoi MapReduce est moins performant dans les bases de donnĂ©es. En comparant MapReduce et les systĂšmes de bases de donnĂ©es parallĂšles, trois facteurs, pouvant affecter les performances de MapReduce, ont Ă©tĂ© mis en Ă©vidence :
- mode d'entrée/sortie : la façon dont le lecteur récupÚre les informations ;
- l'analyse des données : la façon dont le lecteur analyse les données ;
- l'indexation.
MapReduce utilise un systĂšme de planification afin d'affecter les blocs de donnĂ©es aux nĆuds disponibles dans le cluster. Ce systĂšme provoque des coĂ»ts d'exĂ©cution et peut ralentir l'exĂ©cution de MapReduce. Deux facteurs peuvent influencer les performances de MapReduce :
- la taille des blocs de données distribués ;
- l'algorithme de planification.
Mode entrée/sortie
Deux modes de lectures peuvent ĂȘtre utilisĂ©s par le lecteur afin de lire les donnĂ©es stockĂ©es dans un systĂšme de stockage.
- Le mode entrée/sortie direct avec lequel le lecteur lit directement les données stockées dans le disque local. Dans ce cas, les données sont transférées depuis la mémoire cache vers la mémoire du lecteur en utilisant l'accÚs direct à la mémoire.
- Le mode entrée/sortie streaming avec lequel le lecteur lit les données depuis un autre processus en cours d'exécution à l'aide de moyen de communication entre les processus comme TCP/IP ou JDBC.
D'aprÚs les tests réalisés dans cette étude[8], la différence de performance entre ces deux modes est faible (environ 10 %).
Le parsage des données
Quand le lecteur rĂ©cupĂšre les donnĂ©es depuis le systĂšme de stockage, il doit convertir les donnĂ©es en paire <clĂ©, valeur> pour continuer l'exĂ©cution (ce processus s'appelle l'analyse de donnĂ©es). L'analyse consiste Ă dĂ©coder les donnĂ©es depuis leur format natif de stockage afin de les transformer vers un format qui pourra ĂȘtre utilisĂ© par un langage de programmation. Il existe deux types de dĂ©codage, le dĂ©codage immuable et le dĂ©codage mutable. Le dĂ©codage immuable consiste Ă transformer des donnĂ©es en objets immuables. Les objets immuables en programmation orientĂ©e objet sont des objets dont l'Ă©tat ne peut ĂȘtre modifiĂ© aprĂšs leur crĂ©ation contrairement aux objets mutables.
Lorsque l'on utilise le décodage immuable, chaque donnée sera alors placée dans un objet immuable. Par conséquent, si l'on décode 4 millions de données, 4 millions d'objets immuables seront créés. Par défaut, le MapReduce de Google utilise des objets immuables[9].
Une autre méthode consiste à utiliser le décodage mutable. Avec ce décodage, un objet mutable est réutilisé pour décoder toutes les données. Ainsi, le nombre de données n'est plus important car seulement un objet sera créé.
D'aprÚs les études[10] - [11] - [12], les faibles performances du parsage sont dues au décodage immuable. Le décodage immuable est plus lent que le décodage mutable car il produit un grand nombre d'objets immuables durant le processus de décodage. La création de tous ces objets immuables augmente la charge de travail des processeurs.
L'indexation
Le MapReduce étant indépendant du systÚme de stockage, il ne peut pas prendre en compte l'ensemble des données en entrée pour avoir un index disponible. MapReduce ne semble pas capable d'utiliser des index[10]. Cependant, trois méthodes pour utiliser les index ont été trouvées afin d'augmenter la vitesse du processus du traitement des données[13].
- MapReduce offre une interface aux utilisateurs pour spĂ©cifier un algorithme pour la distribution des nĆuds. Par consĂ©quent, il est possible d'implĂ©menter un algorithme qui utilise l'index pour rĂ©duire les blocs de donnĂ©es.
- Si l'ensemble des données en entrée du MapReduce est un ensemble de fichiers indexés (avec des B-Arbres), on peut traiter ces données en implémentant un nouveau lecteur. Le lecteur va prendre certaines conditions de recherche et va l'appliquer à l'index afin de récupérer les données contenues dans chaque fichier.
- Si les donnĂ©es en entrĂ©e du MapReduce consistent en des tables indexĂ©es stockĂ©es dans n serveurs de bases de donnĂ©es, il est possible d'appliquer n tĂąches map pour traiter ces tables. Dans chaque tĂąche map, la fonction map() envoie une requĂȘte SQL vers un serveur de base de donnĂ©es pour rĂ©cupĂ©rer les donnĂ©es. Ainsi, on utilise de façon transparente les index de la base de donnĂ©es.
Distribution des blocs/algorithme de planification
Pour rĂ©duire les temps de planification, il est possible de modifier la taille des blocs de donnĂ©es Ă distribuer aux nĆuds du cluster. Si l'on augmente la taille des blocs de donnĂ©es, alors la planification sera plus rapide, car elle nĂ©cessitera moins de tĂąches map. Cependant, si l'on augmente trop la taille des blocs, alors le risque d'Ă©chec est plus important[14].
Utilisations
MapReduce peut ĂȘtre utilisĂ© pour un grand nombre d'applications[15], 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[16], traduction automatique statistique (distributed grep, distributed sort, web link-graph reversal, term-vector per host, web access log stats inverted index construction, document clustering, machine learning, statistical machine translation). De maniĂšre plus significative, quand MapReduce fut terminĂ©, il a Ă©tĂ© utilisĂ© pour rĂ©gĂ©nĂ©rer entiĂšrement les index Internet de Google, et a remplacĂ© les vieux programmes ad hoc utilisĂ©s pour la mise Ă jour de ces index et pour les diffĂ©rentes analyses de ces index[17].
MapReduce génÚre un large nombre d'intermédiaires et de fichiers temporaires, qui sont généralement gérés et accédés via le Google File System pour de meilleures performances.
Hadoop
Présentation
Hadoop est une implĂ©mentation open source en Java du MapReduce distribuĂ© par la fondation Apache. Il a Ă©tĂ© mis en avant par des grands acteurs du web tels que Yahoo! et Facebook[18]. Les deux caractĂ©ristiques principales de Hadoop sont le framework MapReduce et le Hadoop Distributed File System (qui sâinspire du Google File System). Le HDFS permet de distribuer les donnĂ©es et de faire des traitements performants sur ces donnĂ©es grĂące au MapReduce en distribuant une opĂ©ration sur plusieurs nĆuds afin de la parallĂ©liser[19].
Dans Hadoop, le nĆud maĂźtre est appelĂ© le JobTracker et les nĆuds esclaves sont appelĂ©s TaskTracker. Chaque nĆud esclave va contenir les blocs de donnĂ©es en les rĂ©pliquant. Le nĆud maĂźtre connaĂźt les emplacements des diffĂ©rentes rĂ©pliques. Le nĆud maĂźtre secondaire sert Ă effectuer des sauvegardes rĂ©guliĂšres du nĆud maĂźtre afin de pouvoir le rĂ©utiliser en cas de problĂšme[20].
Hadoop exĂ©cute une tĂąche de type MapReduce en commençant par diviser les donnĂ©es en entrĂ©e en bloc de donnĂ©es de mĂȘme taille. Ensuite, chaque bloc est planifiĂ© pour ĂȘtre exĂ©cutĂ© par un TaskTracker. Le processus dâassignement des tĂąches est implĂ©mentĂ© comme un protocole de type « battement de cĆur ». Cela signifie que le TaskTracker notifie le JobTracker que sa tĂąche est terminĂ©e afin que celui-ci lui assigne une nouvelle tĂąche Ă exĂ©cuter. Lorsque la fonction map est achevĂ©e, le systĂšme va regrouper toutes les paires intermĂ©diaires et lancer une sĂ©rie de rĂ©ductions pour produire le rĂ©sultat final[21].
En milieu hétérogÚne
L'implĂ©mentation 2010 de Hadoop considĂšre que le traitement se rĂ©alise sur un cluster de machines homogĂšnes (c'est-Ă -dire qu'elles possĂšdent toutes les mĂȘmes caractĂ©ristiques matĂ©rielles)[22]. Il ne tient pas compte non plus de la localitĂ© des donnĂ©es, il considĂšre que toutes les donnĂ©es sont locales. Malheureusement, ces deux facteurs peuvent influencer les performances du MapReduce de maniĂšre consĂ©quente[23].
En milieu homogĂšne, tous les nĆuds ont la mĂȘme charge de travail, ce qui indique qu'aucune donnĂ©e ne devra ĂȘtre transfĂ©rĂ©e d'un nĆud vers un autre. En milieu hĂ©tĂ©rogĂšne, un nĆud ayant des performances Ă©levĂ©es peut terminer son traitement local plus rapidement qu'un nĆud ayant des performances plus faibles. Lorsque le nĆud rapide a terminĂ© son traitement, il devra rĂ©cupĂ©rer les donnĂ©es non traitĂ©es d'un ou plusieurs autres nĆuds plus lents. Le transfert d'une donnĂ©e d'un nĆud lent vers un nĆud rapide a un coĂ»t Ă©levĂ©[24].
Présentation
Le MapReduce a Ă©mergĂ© en 2004[25] 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[26]. Il commence[27] 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.
En termes de ressources, le Cloud peut se caractériser en trois points : une capacité de stockage des données importante, de la puissance de calcul à la demande, utilise peu de bande passante[27]. La taille des données stockées dans le Cloud augmente sans cesse notamment les fichiers de type image, vidéo, audio ou les instruments scientifiques pour réaliser des simulations[28] - [29]. Le traitement de ces données est devenu l'un des principaux défis du Cloud Computing[30].
Le Cloud utilise principalement des machines virtuelles(VM) pour exĂ©cuter les applications. Les VM permettent dâexploiter pleinement les ressources du systĂšme, dâamĂ©liorer la fiabilitĂ© du systĂšme en sauvegardant l'Ă©tat du systĂšme Ă l'aide de fonctionnalitĂ© incluse dans les machines virtuelles et de rĂ©duire la consommation Ă©nergĂ©tique en rĂ©duisant le nombre de nĆuds utilisĂ©s pour rĂ©aliser les tĂąches.
Combiner le Cloud Computing qui utilise des VM et le MapReduce peut s'avĂ©rer ĂȘtre intĂ©ressant. Principalement, parce que les technologies de virtualisation sont arrivĂ©es Ă maturitĂ©. Elles ont dĂ©jĂ Ă©tĂ© utilisĂ©es pour des grilles de calcul pour utiliser pleinement les ressources des nĆuds de calcul, des applications HPC (High-Performance computing). De plus, dâun cĂŽtĂ© il y a la progression croissante de la popularitĂ© du Cloud (qui utilise des VM), de lâautre, le MapReduce commence Ă ĂȘtre largement utilisĂ© grĂące Ă ses nombreux points forts notamment pour sa scalabilitĂ© et sa tolĂ©rance aux fautes. Câest pourquoi, combiner ces deux technologies permettrait de crĂ©er un moyen efficace de traiter des donnĂ©es consĂ©quentes sur le Cloud[31]. Ă cela sâajoute le fait que le MapReduce utilise des tĂąches spĂ©culatives. Ce sont des tĂąches qui peuvent ĂȘtre relancĂ©es sur un autre nĆud si elles sont dĂ©tectĂ©es comme Ă©tant trop lente. Le problĂšme est que relancer une tĂąche peut faire diminuer les performances en augmentant le temps d'exĂ©cution Ă©tant donnĂ© que la tĂąche doit reprendre tout le traitement. GrĂące aux nouvelles technologies des VM que sont la sauvegarde et la migration, les performances et la fiabilitĂ© du MapReduce sont amĂ©liorĂ©es[31]. La fonctionnalitĂ© de sauvegarde consiste Ă sauvegarder lâĂ©tat du systĂšme, il peut ainsi retourner Ă cet Ă©tat s'il rencontre une erreur grave qui empĂȘche son bon fonctionnement[32]. La fonctionnalitĂ© de migration consiste Ă distribuer une VM ou une application sur plusieurs nĆuds physiques sans stopper lâapplication.
Performance
Pour tester le MapReduce, les diffĂ©rentes mesures sont effectuĂ©es sur le framework Hadoop. Des tests de performance sont rĂ©alisĂ©s sur le HDFS car il joue un grand rĂŽle dans lâexĂ©cution du MapReduce. En effet, c'est notamment le HDFS qui se charge de la rĂ©partition des tĂąches sur les diffĂ©rents nĆuds, il dĂ©cide aussi de la taille des donnĂ©es Ă traiter par nĆud[22]. Dâautres tests seront effectuĂ©s sur la faisabilitĂ© dâutiliser des VM pour amĂ©liorer les performances du MapReduce en augmentant lâutilisation des ressources (en augmentant le nombre de VM par nĆud). Les performances sont mesurĂ©es Ă lâaide de deux benchmark connus, le benchmark de tri et de comptage de mots.
- benchmark de tri
- ce benchmark utilise le map/reduce framework pour trier des données en entrée.
- Le benchmark « Comptage de mots »
- ce benchmark compte le nombre dâoccurrences de chaque mot dans un fichier et Ă©crit le rĂ©sultat sur le disque local.
HDFS
LâĂ©valuation des performances du HDFS se fait dans un cluster physique (PH-HDFS) et dans un cluster virtuel (VM-HDFS lors dâĂ©criture et de lecture de donnĂ©es afin de montrer les diffĂ©rences de performances entre un cluster physique et un cluster virtuel.
Dans cette évaluation, plusieurs transferts de données de différentes tailles sont effectués. Le PH-HDFS réalise des meilleurs temps, les écarts se creusent lorsque les données augmentent en taille.
Dans cette Ă©valuation, une ou plusieurs requĂȘtes sont lancĂ©es simultanĂ©ment et on mesure le temps nĂ©cessaire pour rĂ©aliser le transfert de donnĂ©es. Les performances du PH-HDFS sont meilleures que celles du VM-HDFS.
VMs feasiblity
Avec lâavĂšnement des processeurs multi-cĆurs, il est pertinent dâutiliser des processeurs multi-cĆurs du cluster pour installer plusieurs VM par processeur afin d'utiliser pleinement les capacitĂ©s du nĆud. Pour les tests, plusieurs clusters ont Ă©tĂ© mis en place afin d'Ă©valuer l'impact de l'augmentation du nombre de VM par nĆud :
- Ph-Cluster : 7 nĆuds physiques
- V-Cluster : 1 VM par nĆud â 7 nĆuds VM dans le cluster
- V2-Cluster : 2 VM par nĆud â 13 nĆuds VM dans le cluster
- V4-Cluster : 4 VM par nĆud â 25 nĆuds VM dans le cluster
Comme le montre cette figure, le benchmark « comptage de mots » avec le Ph-Cluster est plus rapide que le V-Cluster. Lorsque les donnĂ©es font 1 Gb, la diffĂ©rence est faible. Mais lorsque les donnĂ©es sont beaucoup plus importantes (ici 8 Gb), on observe un Ă©cart important. Cela est causĂ© par lâaugmentation des tĂąches spĂ©culatives ce qui cause une utilisation inefficace des ressources. En revanche, les clusters V2 et V4 sont beaucoup plus performants que le Ph-Cluster car il y a beaucoup plus de calculs par cycle.
Lorsque le benchmark de tri est lancĂ©, le temps dâexĂ©cution, pour la mĂȘme distribution des donnĂ©es, augmente avec lâaugmentation du nombre de VM dĂ©ployĂ©es sur un nĆud physique. De plus, les Ă©carts se creusent lorsque la taille des donnĂ©es distribuĂ©es augmente. Cela est provoquĂ© pour 3 raisons : les mauvaises performances du HDFS dans les VM lors des opĂ©rations de lecture/Ă©criture (comme vu prĂ©cĂ©demment), lâaugmentation du nombre de tĂąche spĂ©culative (Figure 6) et lâimportante quantitĂ© de donnĂ©es transfĂ©rĂ©es pendant les Ă©tapes intermĂ©diaires[33].
Extensions de Hadoop
Rappelons que Hadoop est un framework basĂ© sur le modĂšle de programmation MapReduce. Ătant trĂšs utilisĂ© dans les calculs de trĂšs grandes masses de donnĂ©es, plusieurs amĂ©liorations de ce framework sont apparues. Ces extensions sont des frameworks : "BlobSeer" modifie le systĂšme de fichiers pour amĂ©liorer lâaccĂšs aux donnĂ©es, "Phoenix" rĂ©partit les tĂąches sur les processeurs en utilisant le MapReduce, et "Mars" amĂ©liore le calcul de donnĂ©es sur des processeurs graphiques.
Présentation
Comme dit prĂ©cĂ©demment, le problĂšme de performance de Hadoop en milieu hĂ©tĂ©rogĂšne est dĂ» au transfert des donnĂ©es entre les nĆuds rapides et les nĆuds lents. Lorsqu'une large quantitĂ© de donnĂ©es est transfĂ©rĂ©e, cela affecte de maniĂšre significative.
Afin d'amĂ©liorer les performances de Hadoop, il faut minimiser le transfert des donnĂ©es entre les nĆuds rapides et lents[4]. Pour cela, un mĂ©canisme de placement de donnĂ©es a Ă©tĂ© implĂ©mentĂ©; il distribue et stocke les donnĂ©es Ă travers de nombreux nĆuds hĂ©tĂ©rogĂšnes en fonction de leurs capacitĂ©s. Avec cela, le transfert des donnĂ©es peut ĂȘtre rĂ©duit si le nombre de donnĂ©es placĂ©es dans le disque de chaque nĆud est proportionnel Ă la vitesse de traitement des nĆuds.
La rĂ©plication des donnĂ©es prĂ©sente de nombreuses limitations. PremiĂšrement, cela reprĂ©sente un coĂ»t important pour crĂ©er chaque rĂ©plique des donnĂ©es Ă l'intĂ©rieur d'un cluster ayant un nombre important de nĆuds. DeuxiĂšmement, distribuer un nombre important de rĂ©pliques peut provoquer une surcharge de la bande passante du cluster. TroisiĂšmement, stocker les rĂ©pliques requiert des disques ayant une Ă©norme quantitĂ© de stockage.
Amélioration
Des chercheurs se sont focalisĂ©s sur ce problĂšme afin de produire un mĂ©canisme de placement des donnĂ©es[34]. Pour corriger le problĂšme, ils se sont penchĂ©s sur le meilleur moyen de placer les donnĂ©es oĂč les fichiers ne seront dĂ©coupĂ©s et distribuĂ©s sur plusieurs nĆuds sans les dupliquer.
Ce mécanisme est basé sur 2 algorithmes[24] qui sont incorporés dans le HDFS de Hadoop :
- Le premier algorithme consiste à distribuer des fragments du fichier en entrée.
- Le deuxiÚme algorithme consiste à réorganiser les fragments du fichier et à corriger les erreurs qui peuvent arriver aprÚs l'exécution du premier algorithme.
Le premier algorithme fonctionne comme ceci[24]:
- il commence par diviser le fichier d'entrĂ©e en un nombre de fragments de mĂȘme taille.
- Puis il assigne les fragments aux nĆuds du cluster en fonction de la vitesse de traitement des nĆuds. (Cela aura pour consĂ©quence qu'un nĆud avec des faibles performances aura moins de fragments Ă traiter qu'un nĆud avec des meilleures performances).
Si l'on considĂšre une application, utilisant le MapReduce, et un fichier d'entrĂ©e dans un cluster hĂ©tĂ©rogĂšne de Hadoop. Le placement initial des donnĂ©es ne tient pas compte des performances des nĆuds car Hadoop estime que tous les nĆuds vont exĂ©cuter et terminer leur tĂąche avec, environ, le mĂȘme temps. Des expĂ©rimentations[35], ont montrĂ© qu'en rĂšgle gĂ©nĂ©rale, le temps de traitement de chaque nĆud Ă©tait stable car le temps de rĂ©ponse de chaque nĆud est linĂ©airement proportionnel Ă la taille des donnĂ©es. Avec ceci, on peut quantifier la vitesse de traitement de chaque nĆud dans un environnement hĂ©tĂ©rogĂšne. Le terme pour dĂ©finir la performance de chaque nĆud est "Ratio Performance"[34].
Le Ratio Performance de chaque nĆud est dĂ©terminĂ© Ă l'aide de cette procĂ©dure :
- Les opĂ©rations d'une application utilisant le MapReduce sont rĂ©alisĂ©es sĂ©parĂ©ment sur chaque nĆud
- On rĂ©cupĂšre ensuite les temps de rĂ©ponse de chaque nĆud
- Le temps de réponse le plus court est utilisé comme temps pour normaliser les mesures du temps de réponse
- Les valeurs normalisĂ©es, appelĂ©es Ratio Performance, sont utilisĂ©es par l'algorithme de placement pour distribuer les fragments de fichier aux nĆuds.
Prenons un exemple afin de montrer comment les Ratio Performance sont calculĂ©es. Prenons 3 nĆuds hĂ©tĂ©rogĂšnes A, B et C dans un cluster Hadoop. AprĂšs avoir exĂ©cutĂ© l'application sĂ©parĂ©ment sur chaque nĆud, on rĂ©cupĂšre le temps de rĂ©ponse de chaque nĆud A, B et C (10 s, 20 s et 30 s respectivement). Le temps de rĂ©ponse du nĆud A est le plus court, par consĂ©quent, le Ratio Performance de A vaut 1. Les Ratio Performance de B et C valent 2 et 3 respectivement. Cela signifie que le nĆud A pourra gĂ©rer 30 fragments du fichier d'entrĂ©e tandis que le nĆud C en gĂ©rera seulement 10.
AprĂšs l'exĂ©cution de l'algorithme de distribution des fragments pour rĂ©aliser le placement initial, les fragments peuvent ĂȘtre corrompus pour plusieurs raisons:
- de nouvelles données ont été ajoutées au fichier de départ,
- des blocs de données ont été supprimés du fichier,
- de nouveaux nĆuds ont Ă©tĂ© ajoutĂ©s au cluster.
Pour Ă©viter ces problĂšmes, un deuxiĂšme algorithme[34] a Ă©tĂ© implĂ©mentĂ© pour rĂ©organiser les fragments du fichier en le basant sur le Ratio Performance des nĆuds.
Cet algorithme fonctionne comme ceci :
- Les informations concernant la topologie du réseau et l'espace disque du cluster sont collectées par le serveur de distribution des données.
- Le serveur crĂ©e deux listes de nĆuds (s'agit-il vraiment de listes de nĆuds ? la description donne plutĂŽt l'impression de deux vecteurs d'information sur les nĆuds) : une liste de nĆuds qui contient le nombre de fragments dans chaque nĆud qui peuvent ĂȘtre ajoutĂ©s, une liste de nĆuds qui contient le nombre de fragments locaux dans chaque nĆud qui excĂ©dent la capacitĂ© de celui-ci.
- Le serveur de distribution des donnĂ©es transfĂšre les fragments d'un nĆud, dont la capacitĂ© du disque a Ă©tĂ© dĂ©passĂ©, vers un nĆud qui possĂšde encore de l'espace disque.
Dans le processus de migration des donnĂ©es entre 2 nĆuds[34] (un surchargĂ© et un ayant de l'espace disque), le serveur transfĂšre les fragments du fichier depuis le nĆud source de la liste des nĆuds en surcharge vers un nĆud ayant encore de l'espace de la liste des nĆuds sous-utilisĂ©s. Ce processus est rĂ©pĂ©tĂ© jusqu'Ă ce que le nombre de fragments dans chaque nĆud soit en accord avec son Ratio Performance.
Performances
Afin de montrer les résultats de ces algorithmes de cette étude[36], deux tests ont été effectués, le Grep et le WordCount. Ces 2 applications tournent sur des clusters Hadoop. Grep est un outil de recherche pour une expression réguliÚre dans un texte. WordCount est un programme utilisé pour compter les mots dans un texte.
Les résultats ont montré que ces algorithmes ont amélioré les performances du Grep de 17 % en moyenne et le WordCount de 7 % en moyenne.
Présentation
Hadoop est un framework basé sur le modÚle de programmation Map/Reduce. Et pour cela Hadoop doit s'appuyer sur un "puissant outil" : son systÚme de fichier HDFS[37]. Le systÚme de fichier HDFS (appelé Hadoop Distributed File System) est un paramÚtre important de la performance de calcul de Hadoop car il lui est spécifique. C'est-à -dire qu'il a été conçu de façon à maximiser les accÚs aux données.
Seulement des erreurs subsistent lorsque plusieurs processus accĂšdent Ă un mĂȘme fichier. C'est le framework Blobseer qui propose une solution[37] Ă ce problĂšme. En effet, ce framework propose de modifier le HDFS pour le remplacer par son propre systĂšme de fichier le BSFS (Blobseer File System).
Un nouveau systĂšme de fichier
Les raisons du changement de ce systĂšme de fichier sont liĂ©es aux problĂšmes dâaccĂšs concurrent sur un mĂȘme fichier. Le systĂšme HDFS a Ă©tĂ© conçu de maniĂšre Ă permettre les meilleures performances de calcul de Hadoop, cependant cette implĂ©mentation ne suffit pas. Le systĂšme de fichier HDFS ne permet pas de maintenir[37] un haut dĂ©bit sur les accĂšs concurrents Ă un mĂȘme fichier, de plus le systĂšme de fichier actuel ne permet pas certaines fonctionnalitĂ©s tel que le "versioning" ou encore diffĂ©rents update simultanĂ©s sur un mĂȘme fichier.
L'un des points forts de Hadoop est de parcourir des pĂ©taoctets en quelques heures seulement, cela est dĂ» au fait que les fichiers ont une taille de plusieurs centaines de gigaoctets. De ce fait, il devient possible d'accĂ©der Ă de petites parties d'un mĂȘme fichier de façon concurrente. Il ne faut pas oublier qu'il serait impossible de travailler avec des millions de petits fichiers au lieu d'un seul, et mĂȘme si le systĂšme de fichier le permet, maintenir un trĂšs haut dĂ©bit n'est pas faisable.
Blobseer propose[37] donc un systĂšme de fichier qui permet d'accĂ©der Ă des petites parties d'un grand fichier, permettant ainsi Ă des milliers de "clients" de modifier le mĂȘme fichier sans problĂšme de conflit. BSFS permet donc aussi le "versioning" ce qui permet de supprimer les changements indĂ©sirables et la crĂ©ation de branches indĂ©pendantes ce qui ne devrait pas diminuer les performances de calcul ni la surcharge de l'espace de stockage qui serait dĂ» Ă des milliers de petits fichiers.
Performances
Les performances du framework ont été testées sur grid5000[38]. Blobseer a été comparé avec Hadoop. Pour cela, les frameworks ont été utilisés sur des micro-tùches :
- Un seul processus qui Ă©crit sur un fichier volumineux ( > 20 GB)[38],
- Des processus qui lisent les mĂȘmes parties d'un seul fichier en mĂȘme temps,
- Des processus qui Ă©crivent dans un mĂȘme fichier volumineux.
Les relevĂ©s de performances ont montrĂ© que le dĂ©bit (lâaccĂšs au donnĂ©es) Ă©tait jusqu'Ă deux fois supĂ©rieur Ă celui de Hadoop[38]. Ces rĂ©sultats ont aussi rĂ©vĂ©lĂ© que le framework BlobSeer peut supporter jusquâĂ deux fois plus de clients (c'est-Ă -dire le nombre dâaccĂšs sur un seul fichier). Le ratio des performances entre BlobSeer et Hadoop n'est pas supĂ©rieur Ă deux[38]. En effet, BlobSeer utilise les mĂȘmes capacitĂ©s de calcul que Hadoop, Ă la diffĂ©rence que le systĂšme de fichiers a Ă©tĂ© modifiĂ©.
Présentation
Phoenix est une API basĂ©e sur le modĂšle MapReduce, proposĂ© par google. La diffĂ©rence est que Phoenix est utilisĂ© sur les ordinateurs multi-cĆurs et donc, il n'utilise pas des serveurs mais des threads pour pouvoir utiliser le MapReduce. Phoenix est basĂ© sur un langage fonctionnel, de façon Ă rendre la parallĂ©lisation totalement transparente Ă l'utilisateur. Phoenix est utilisĂ© en C et C++.
La structure
C'est une API dĂ©veloppĂ©e pour ĂȘtre utilisĂ©e avec du code C/C++ mais elle peut ĂȘtre facilement exportable en java/C#[40]. Pointeurs, Buffer, P-Threads sont utilisĂ©s pour augmenter la performance de l'API. Les Buffers permettent d'accĂ©der aux donnĂ©es dans une mĂ©moire partagĂ©e. Il y a deux types de buffers : les input/output sont les buffers contenant les donnĂ©es en entrĂ©e ainsi que celles en sortie, c'est-Ă -dire les donnĂ©es dont l'utilisateur a besoin, et les autres buffers. Ces derniers sont ceux utilisĂ©s pour rĂ©aliser le MapReduce, ce sont donc des buffers "invisibles" aux yeux de l'utilisateur. Les pointeurs sont utilisĂ©s Ă©vitant au maximum la non duplication des donnĂ©es amĂ©liorant ainsi significativement la vitesse de calcul des donnĂ©es. L'utilisation de P-Threads permet Ă l'API de rĂ©partir son travail sur plusieurs processeurs en suivant le modĂšle de programmation MapReduce.
Performances[41]
Les performances ont été calculées sur des tùches basiques telles que :
- Calculer la fréquence d'apparition d'un mot dans un texte,
- Trouver les dépendances entre les liens de toutes les pages d'un site web (quel lien relie telle page),
- Multiplication d'une matrice,
- Coder un texte avec une clé correspondant à un autre texte (String match),
- KMeans (classification des points en 3D dans des groupes),
- Calculer la fréquence des couleurs RGB dans un tableau d'images,
- Calculer la ligne qui correspond Ă un nuage de points sur un graphique,
avec comme valeur Ă©talon, les performances des p-threads sans le modĂšle de MapReduce.
Les rĂ©sultats de Phoenix[42] montrent qu'avec un processeur 4 cĆurs, on peut accĂ©lĂ©rer les calculs de 40 % et avec 8 cĆurs, on peut aller jusqu'Ă 50 %. Cependant, bien que la vitesse de calcul soit augmentĂ©e, sur de simples machines elle reste nĂ©anmoins Ă©quivalente Ă celle des p-threads. En effet, bien que le modĂšle de MapReduce soit trĂšs efficace sur des clusters a l'Ă©chelle de millions de donnĂ©es, l'implĂ©mentation du modĂšle n'est pas assez gĂ©nĂ©rale[43] pour couvrir la totalitĂ© des programmes.
Présentation
Encouragé par le succÚs du modÚle programmation MapReduce, le framework Mars[45] a vu le jour, permettant d'implémenter le modÚle MapReduce sur des processeurs graphiques. Les processeurs graphiques (GPU) ont dix fois plus de bande passante mémoire que les CPU, et sont aussi jusqu'à dix fois plus rapides[46].
Performances
Pour Ă©valuer ces performances, Mars a Ă©tĂ© comparĂ© avec Phoenix[39], sur les mĂȘmes tĂąches. Il en est ressorti que les performances de Mars sont 1,5 fois plus Ă©levĂ©es que celles de Phoenix[47].
Optimisation
Mars est encore en cours d'étude, cependant trois points essentiels sont relevés pour une future évolution[47] :
- Mars ne peut pas s'occuper de trop grandes données, il est bloqué à la taille de la mémoire du GPU,
- Mars est implémenté sur des GPU NVIDIA, il serait intéressant de le développer sur les GPU AMD,
- Phoenix est implémenté sur des CPU et Mars sur des GPU. Un framework combinant les deux API pourrait voir le jour, dans le but d'intégrer les avantages des deux types de processeurs.
Alternatives Ă Hadoop
Présentation
PQL est un langage implĂ©mentĂ© comme une extension de java[48]. Il a Ă©tĂ© conçu de façon Ă augmenter son expressivitĂ© et sa modularitĂ©, une comparaison entre son implĂ©mentation et celle de java sur des tĂąches parallĂšles similaires a Ă©tĂ© effectuĂ©e[48]. La parallĂ©lisation est un problĂšme dâactualitĂ© dans lâinformatique, câest pourquoi il est important de crĂ©er des langages ou des librairies permettant de faciliter la parallĂ©lisation. Cependant il ne faut pas oublier la programmation sĂ©quentielle, câest pourquoi lâimplĂ©mentation d'un langage adaptĂ© Ă la programmation parallĂšle et sĂ©quentielle est essentiel. Tous les programmes implĂ©mentĂ©s avec PQL sont parallĂ©lisĂ©s grĂące Ă la programmation dĂ©clarative.
Programmation DĂ©clarative
PQL est un langage basĂ© sur la programmation dĂ©clarative, ce qui veut dire que le programmeur peut spĂ©cifier ce qu'il veut faire sans pour autant prĂ©ciser âcommentâ le faire. PQL a Ă©tĂ© implĂ©mentĂ© pour trouver la mĂ©thode la plus rapide Ă exĂ©cuter. En effet, il va savoir quel bout de code devra ĂȘtre parallĂ©lisĂ© ou non. Ce nâest pas au dĂ©veloppeur de chercher la façon dâoptimiser son code. PQL rĂ©partit la charge de travail sur les processeurs disponibles en utilisant le MapReduce. PQL a Ă©tĂ© optimisĂ© pour les tĂąches parallĂšles de façon que l'utilisateur ait le moins de manipulations Ă faire comparĂ© Ă un code parallĂšle Ă©crit par l'utilisateur.
Language illustration
PQL utilise les booléens &&, ||, XAND, XOR ainsi que des mots-clés tels que reduce, forall, query, exists[49]. Le nombre de mots clés de PQL est explicitement réduit pour améliorer un maximum la parallélisation.
Une requĂȘte peut sâimplĂ©menter avec[49]: une Quantifier Expression (renvoie une quantitĂ©, utilise les forall, existsâŠ), une Java Expression (du code Java), un id (variable, avec ou sans type), une QExpr (combine les cas prĂ©cĂ©dents).
Exemple :
int[] array = query(Array[x]==y):range(1,1000).contains(x) && y=x*x;
La requĂȘte va retourner un tableau d'entiers contenant les carrĂ©s de x entre 1 et 1000.
Une quantifier expression peut sâĂ©crire sous la forme[49]: QUANT-EXPR::=<QUANT> <ID> â:â <QUERY> queryâ(â <MATCH> â)â â:â <QUERY> (Container queries) reduceâ(â id â)â <ID>[over<ID-SEQ>]:<QUERY> (Reductions)
Exemple : forall int x : x == x toujours vrai (Quantifier) (ID) (x==x query)
Container queries : query (Map.get(x) == y): range(1, 10).contains(x) && y == x*x queryâ(â <MATCH> â)â â:â <QUERY> Va construire une map contenant les carrĂ©s de 1 Ă 10 (on peut accĂ©der Ă lâĂ©lĂ©ment 0 mais ça retournera un null)
Opération de réduction :
reduce (sumInt) x : myset.contains(x)
cette expression va additionner tous les x contenus dans myset
reduce (sumDouble) x over y : set.contains(y) && x == 1.0 / y
Additionne les inverses des éléments contenus dans la map
Les types peuvent ĂȘtre dĂ©clarĂ©s implicitement (l'utilisateur n'a pas besoin de dĂ©clarer le type) ou explicitement (l'utilisateur doit dĂ©clarer le type de la variable)[50]. PQL lĂšve les exceptions mais on nâa pas de garantie de lâordre[51]. PQL utilise == ou = pour les Ă©galitĂ©s (sauf pour les string et les objets .equals())[51].
Lâutilisateur peut crĂ©er ses propres rĂ©ductions. Elle doivent respecter plusieurs propriĂ©tĂ©s (mĂ©thode statique, associative, commutativeâŠ). Si ces propriĂ©tĂ©s n'Ă©taient pas respectĂ©es, cela entraĂźnerait des erreurs[52].
Performances
Pour Ă©valuer PQL, diffĂ©rentes tĂąches ont Ă©tĂ© implĂ©mentĂ©es[53](calcul des primes dâun grand nombre dâemployĂ©s, trouver une sous-chaĂźne dans une chaĂźne de chaĂźnes de caractĂšres, une liste de documents qui peuvent ĂȘtre reliĂ©s entre eux, le but Ă©tant de trouver les cycles, calculer le nombre dâoccurrences de tous les mots dans plusieurs textes).
L'implémentation des solutions suivant les différentes façons[53] :
- Le PQL
- Une méthode Java mono thread
- Multi thread Java
- SQL
- Framework Hadoop
Lors de lâimplĂ©mentation avec le mono-thread et PQL, des variables dâentrĂ©e sont utilisĂ©es mais sans aucune variable temporaire[54], tandis que pour les autres implĂ©mentations l'utilisation de variables et des tableaux intermĂ©diaires Ă©tait nĂ©cessaire que ce soit pour la communication ou lâoptimisation. LâimplĂ©mentation SQL est simple mais devient trĂšs vite compliquĂ©e si on la mĂ©lange avec du java.
L'implémentation PQL est simple à écrire car elle contient peu de lignes[55]. En effet, la solution qui contient le nombre de lignes minimum est toujours celle avec PQL. La deuxiÚme étant la mono thread (mais non optimisée). Les autres méthodes contiennent 5 à 20 fois plus de lignes.
Dans les 4 tĂąches, seule la premiĂšre ne fait pas de bonnes performances car le temps pour faire les opĂ©rations de merge des rĂ©sultats est trĂšs Ă©levĂ©. Pour les autres tĂąches, PQL peut aller entre 2 et 6 fois plus vite que les autres implĂ©mentations[56]. Tous ces tests montrent que PQL est bien plus performant et utilise moins de lignes de code. Cependant, il est nĂ©cessaire de rappeler que SQL et Hadoop utilisent une table de donnĂ©es et donc que leur temps dâexĂ©cution est ralenti par l'accĂšs Ă cette base. De plus, le framework Hadoop est optimisĂ© pour des calculs sur des clusters et non pas sur une seule machine.
Présentation
Le MapReduce a surtout Ă©tĂ© rĂ©compensĂ© pour sa flexibilitĂ© et son efficacitĂ©. Pourtant, Ă lâheure oĂč lâĂ©cologie prend une place plus importante dans les nouvelles technologies, il est pertinent dâĂ©tudier la consommation Ă©nergĂ©tique du MapReduce et savoir comment la diminuer.
La plupart des frameworks implĂ©mentant le MapReduce, comme Hadoop, considĂšrent que le traitement se fait dans un milieu homogĂšne. En rĂ©alitĂ©, il est trĂšs rare quâun cluster contienne les mĂȘmes machines. Les machines varient selon diffĂ©rents critĂšres basĂ©s sur la consommation Ă©nergĂ©tique : quantitĂ© de pĂąte thermique, vitesse du ventilateur, taille du ventilateur, localisĂ© plus ou moins proche dâune unitĂ© de refroidissement, quantitĂ© de poussiĂšre. Cela implique que des machines vont consommer plus dâĂ©nergie que dâautres pour rĂ©aliser le mĂȘme traitement.
Un framework a donc Ă©tĂ© conçu[57] pour pouvoir planifier de façon dynamique les tĂąches en fonction de la consommation individuelle de chaque nĆud du cluster.
Implémentation
Pour pouvoir planifier dynamiquement, il a dâabord fallu Ă©laborer un moyen de connaĂźtre la consommation de chaque nĆud. Dans cet article[57], une corrĂ©lation a Ă©tĂ© Ă©tablie entre la tempĂ©rature du CPU et la consommation dâĂ©nergie, cette relation prĂ©sente cependant des imprĂ©cisions. En effet, une machine peut consommer une grande quantitĂ© dâĂ©nergie tout en ayant une tempĂ©rature basse si elle se trouve Ă proximitĂ© dâune unitĂ© de refroidissement. En gĂ©nĂ©ral cette corrĂ©lation reste correcte.
Lorsque le NĆud MaĂźtre du HDFS a distribuĂ© les donnĂ©es, il dĂ©marre un thread qui va mesurer la tempĂ©rature de chaque nĆud. Lorsquâun nĆud a fini son traitement, si sa tempĂ©rature est infĂ©rieure Ă la tempĂ©rature maximale dĂ©finie par lâutilisateur, alors une nouvelle tĂąche est affectĂ©e au nĆud, sinon le nĆud sera mis en attente jusquâĂ ce que sa tempĂ©rature baisse ou que le traitement soit terminĂ©. Toutefois, lorsque toutes les tĂąches ont Ă©tĂ© distribuĂ©es, le module de tolĂ©rance aux pannes va commencer son travail sans prendre en compte la tempĂ©rature. En effet, si tous les nĆuds sont en refroidissement, la tĂąche sera alors bloquĂ©e.
Pour rĂ©duire la consommation, deux paramĂštres vont ĂȘtre mis en place : tempĂ©rature maximale dâun nĆud et nombre de tĂąches pour rĂ©aliser un traitement. Dans les prochaines Ă©volutions de ce framework, chaque nĆud aura sa propre tempĂ©rature dĂ©finie car certains processeurs ont une tempĂ©rature plus Ă©levĂ©e lors de leur fonctionnement.
Performances
Les mesures ont Ă©tĂ© rĂ©alisĂ©es sur lâalgorithme WordCount (calcule toutes les itĂ©rations de tous les mots dâun document) dans un milieu hĂ©tĂ©rogĂšne.
Nous allons étudier les variations des performances en fonction des deux paramÚtres cités dans le chapitre précédent.
Température maximale
La limite de tempĂ©rature, pour dĂ©cider si un nĆud est capable ou non dâexĂ©cuter un traitement, peut limiter les performances. Les tests ont Ă©tĂ© effectuĂ©s avec trois tempĂ©ratures diffĂ©rentes (80°, 110°, 120°).
DâaprĂšs la figure, nous constatons que plus la tempĂ©rature maximale est faible, plus le temps dâexĂ©cution est important. Si la tempĂ©rature maximale est trop proche de la tempĂ©rature des CPU au repos, alors trĂšs peu de nĆuds obtiendront une nouvelle tĂąche aprĂšs avoir complĂ©tĂ© la premiĂšre. Le problĂšme est que cela pourrait entraĂźner un blocage de la tĂąche en cours jusquâĂ ce quâun nĆud ait une tempĂ©rature infĂ©rieure Ă la limite. En rĂ©cupĂ©rant les informations du cluster dans lequel le framework est dĂ©ployĂ©, on pourrait Ă©viter un tel risque. Lâune des informations les plus importantes serait la tempĂ©rature de chaque CPU au repos.
De plus, on remarque que plus le nombre de tĂąches par nĆud est important et la tempĂ©rature maximale est faible, plus le temps dâexĂ©cution augmente. Cela est dĂ» au temps de refroidissement des nĆuds pour repasser sous la limite.
Nous constatons la mĂȘme tendance pour la consommation Ă©lectrique de chaque nĆud. Avec ce framework, si nous choisissons correctement la tempĂ©rature maximale, il est possible de faire des Ă©conomies significatives sur la consommation Ă©lectrique tout en limitant la baisse de performance.
Distribution des données
La distribution des donnĂ©es dans chaque nĆud peut aussi influencer les performances et la consommation du MapReduce. Pour les mesures, nous avons un exemple avec un fichier de 500 MB et un de 1 GB.
Dans les 2 graphes, nous constatons 2 points dâintersections, le premier arrive lorsque le ratio tĂąche/nĆud est de 1 (cela signifie quâil y a autant de tĂąches que de nĆuds). Le deuxiĂšme arrive lorsque le ratio est de 2. Cela peut sâexpliquer par le fait que le temps dâexĂ©cution entre le nĆud le plus rapide et le nĆud le plus lent est infĂ©rieur au temps dâexĂ©cution de la tĂąche. Ce qui implique que chaque nĆud a reçu deux tĂąches. Toutefois, lorsque le ratio est de 3, les tĂąches sont beaucoup plus courtes, ce qui implique que le temps dâexĂ©cution entre le nĆud le plus rapide et le nĆud le plus lent est supĂ©rieur au temps dâexĂ©cution de la tĂąche. Dans la suite des travaux sur ce framework, une mĂ©thode sera mise en place pour savoir comment rĂ©partir les tĂąches de façon efficace. Nous pouvons remarquer que la tempĂ©rature maximale joue encore un rĂŽle trĂšs important dans la vitesse dâexĂ©cution.
Pour prouver que la tempĂ©rature maximale et la distribution des donnĂ©es influe sur la consommation dâĂ©nergie. Des mesures ont Ă©tĂ© effectuĂ©es sur la consommation Ă©lectrique dâun nĆud dans un cluster.
Nous pouvons voir quâil y a deux pics de consommation pour le fichier de 2 GB lorsque la tempĂ©rature maximale est de 80 °C. Cela arrive lorsque le nĆud est replanifiĂ©. Quand le nĆud nâest pas replanifiĂ© et que les tĂąches deviennent plus courtes, la division des tĂąches augmente et la consommation Ă©lectrique diminue.
GrĂące Ă ce framework, la consommation Ă©lectrique dâun nĆud a diminuĂ© de 36 %. Ce framework est encore en cours de dĂ©veloppement mais il prĂ©sente dĂ©jĂ des rĂ©sultats trĂšs intĂ©ressants.
Brevet
Google a obtenu un brevet sur la fonction MapReduce, mais la validité de ce brevet est contestée[58] - [59].
Comparaison
Langage | ratio vitesse clusters | ratio de vitesse processeurs | Ăconomie d'Ă©nergie | Environnement | |
---|---|---|---|---|---|
Hadoop | Java | 1 | NC | NC | Cluster |
BlobSeer | Java | 1.35[60] | NC | NC | Cluster |
Mars | Programming GPU | NC | 1.1 ~ 4[61] | NC | Processeur graphique |
Phoenix | C/C++ | NC | 1 | NC | Processeur multi-cĆurs |
Framework Ecologique | Java | NC | NC | 36 % | Cluster |
Articles
- (en) « Evaluating MapReduce on Virtual Machines : The Hadoop Case », Cloud Computing 2009, Shadi Ibrahim, Hai Jin, Lu Lu, Li Qi, Song Wu, Xuanhua Shi,
- (en) « The performance of MapReduce : An In-Depth Study », Proceedings of the VLDB Endowment, Jiang Dawei, , p. 472-483
- (en) « Improving MapReduce Performance through Data Placement in Heterogeneous Hadoop Clusters », 24th IEEE International Symposium on Parallel and distributed, Jiong Xie, Shu Yin, Xiaojun Ruan, Zhiyang Ding, Yun Tian, James Majors, Adam Manzanares, Xiao Qin,
- (en) « Configuring a MapReduce Framework for Dynamic and Efficient Energy Adaptation », 5th IEEE International Conference on Cloud Computing, Jessica Hartog, Zacharia Fadika, Elif Dede, Madhusudhan Govindaraju,
- (en) « Parallel Data Processing with MapReduce : A Survey », ACM, Kyong-Ha Lee, Yoon-Joon Lee, Hyunsik Choi, Yon Dohn Chung, Bongki Moon,
- (en) « BlobSeer: Bringing high throughput under heavy concurrency to Hadoop Map-Reduce applications », 24th IEEE International Symposium on Parallel and distributed, Bogdan Nicolae, Diana Moise,Gabriel Antoniu, Luc Bougé, Mathieu Dorier,
- (en) « MapReduce: Simplified Data processing on Large Cluster », ACM, Jeffrey Dean, Sanjay Ghemawat,
- (en) « Evaluating MapReduce for Multi-core and Multiprocesseur Systems », IEEE 13th International Symposium on High Performance Computer Architecture, 2007. HPCA 2007., Colby Ranger, Ramanan raghuraman,Arun Penmetsa,Gary Bradski, Christos Kozyrakis,
- (en) « Improving MapReduce Performance in Heterogeneous Environments », 8th USENIX Symposium on Operating Systems Design and Implementation, Matei Zaharia, Andy Konwinski, Anthony D. Joseph, Randy Katz, Ion Stoica,
- (en) « A Library to Run Evolutionary Algorithms in the Cloud using MapReduce », EvoApplication, Pedro Eazenda, James McDermott, Una-may OâReilly,
- (en) « Mars : A MapReduce Framework on Graphics Processors », ECOOP 2012 - Object-Oriented Programming - 26th European Conference, Beijing, China, June 11-16, 2012., Bingsheng He, Wenbin Fang, Qiong Luo, Naga K. Govindaraju, Tuyong Wang,
- (en) « PQL: A Purely-Declarative Java Extension for Parallel Programming », 17th International Conference on Parallel Architecture and Compilation Techniques (PACT 2008), Toronto, Ontario, Canada, October 25-29, 2008, Christoph Reichenbach, Yannis Smaragdakis and Neil Immerman,
- (en) « An analysis of traces from a production MapReduce cluster », CMU-PDL-09-107, Soila Kavulya, Jiaqi Tan, Rajeev Gandhi and Priya Narasimhan,
- (en) « A comparison of approaches to large-scale data analysis », Proceedings of the 2009 ACM SIGMOD International Conference on Management of data, A. Pavlo, E. Paulson, A. Rasin, D. J. Abadi, D. J. DeWitt, S. Madden, M. Stonebraker,
- (en) « Mapreduce and parallel dbmss : friends or foss? », Communications of the ACM, M. Stonebraker, D. Abadi, D. J. DeWitt, S. Madden, E.Paulson, A. Pavlo, A. Rasin,
- (en) « Hive - a warehousing solution over a map-reduce framework », Proceedings of the VLDB Endowment VLDB Endowment Homepage archive - August 2009, A. Thusoo, J. S. Sarma, N. Jain, Z. Shao, P. Chakka, S. Anthony, H. Liu, P. Wychoff, R. Murthy,
Articles connexes
Références
- (en) Cet article est partiellement ou en totalitĂ© issu de lâarticle de WikipĂ©dia en anglais intitulĂ© « MapReduce » (voir la liste des auteurs).
- http://www.google.com/patents/US7650331 Brevet octroyé
- The Hadoop Case 2009, p. 521
- The Performance of MapReduce : An In-depth Study 2010, p. 472
- Parallel Data Processing with MapReduce A survey décembre 2011, p. 11-20
- An analysis of traces from a production MapReduce cluster 2009, p. 94-103
- Parallel Data Processing with MapReduce: A survey décembre 2011, p. 13
- The Performance of MapReduce : An In-depth Study 2010, p. 474
- The Performance of MapReduce : An In-depth Study 2010, p. 479
- « Protocolbuffers/protobuf », sur GitHub (consulté le ).
- A comparison of approaches to large-scale data analysis 2009, p. 165-178
- Mapreduce and parallel dbmss : friends or foss? 2010, p. 64-71
- Hive - a warehousing solution over a map-reduce framework 2009, p. 1626-1629
- The Performance of MapReduce : An In-depth Study 2010, p. 475
- The Performance of MapReduce : An In-depth Study 2010, p. 478
- (en) Colby Ranger, Ramanan Raghuraman, Arun Penmetsa, Gary Bradski et Christos Kozyrakis, « Evaluating MapReduce for Multi-core and Multiprocessor Systems », HPCA 2007, Best Paper
- (en) Cheng-Tao Chu, Sang Kyun Kim, Yi-An Lin, YuanYuan Yu, Gary Bradski, Andrew Ng et Kunle Olukotun, « Map-Reduce for Machine Learning on Multicore », NIPS 2006
- (en) « How Google Works », baselinemag.com : « As of October, Google was running about 3,000 computing jobs per day through MapReduce, representing thousands of machine-days, according to a presentation by Dean. Among other things, these batch routines analyze the latest Web pages and update Google's indexes. »
- Liste d'entreprises déclarant utiliser Hadoop
- Hadoop en moins de 5 minutes
- The Performance of MapReduce : An In-depth Study 2010, p. 473
- Improving MapReduce Performance through Data Placement in Heterogeneous Hadoop Clusters 2010, p. 1
- Improving MapReduce Performance through Data Placement in Heterogeneous Hadoop Clusters 2010, p. 2
- Improving MapReduce Performance through Data Placement in Heterogeneous Hadoop Clusters 2010, p. 3
- Parallel Data Processing with MapReduce A survey décembre 2011, p. 14
- Jiang 2010, p. 472
- The Hadoop Case 2009, p. 519
- « Actualités et évÚnements », sur inria.fr (consulté le ).
- « MapReduce for scientific simulation analysis », sur slideshare.net (consulté le ).
- The Hadoop Case 2009, p. 520
- The Hadoop Case 2009, p. 522
- https://technet.microsoft.com/en-us/library/bb740891.aspx
- The Hadoop Case 2009, p. 525
- Jiong Xie, Shu Yun, Xiaojun Ruan, Zhiyang Ding, Yun Tian, James Majors, Adam Manzanares, Xiao Qin, « Improving MapReduce Performance through Data Placement in Heterogeneous Hadoop Clusters », ACM,â , p. 3 (lire en ligne)
- Improving MapReduce Performance through Data Placement in Heterogeneous Hadoop Clusters 2010, p. 4
- Improving MapReduce Performance through Data Placement in Heterogeneous Hadoop Clusters 2010, p. 7
- BlobSeer Framework 2010
- BlobSeer Framework 2010, p. 5
- Phoenix 2007
- Phoenix 2007, ch. 3, p. 3
- Phoenix 2007, ch. 5, p. 8
- Phoenix 2007, ch. 5, p. 7
- Phoenix 2007, ch. 5.4, p. 9
- Mars 2012
- Mars 2012, ch. 1, p. 260
- (en) Query co-processing on commodity processors, (lire en ligne), p. 1267
- Mars 2008, ch. 5, p. 267
- PQL: A Purely-Declarative Java Extension for Parallel Programming 2008, p. 1
- PQL: A Purely-Declarative Java Extension for Parallel Programming 2008, p. 4
- PQL: A Purely-Declarative Java Extension for Parallel Programming 2008, p. 9
- PQL: A Purely-Declarative Java Extension for Parallel Programming 2008, p. 10
- PQL: A Purely-Declarative Java Extension for Parallel Programming 2008, p. 11
- PQL: A Purely-Declarative Java Extension for Parallel Programming 2008, p. 15
- PQL: A Purely-Declarative Java Extension for Parallel Programming 2008, p. 16
- PQL: A Purely-Declarative Java Extension for Parallel Programming 2008, p. 17
- PQL: A Purely-Declarative Java Extension for Parallel Programming 2008, p. 22
- Configuring a MapReduce Framework for Dynamic and Efficient Energy Adaptation 2012, p. 914-920
- « Why Hadoop Users Shouldn't Fear Google's New MapReduce Patent », sur gigaom.com, (consulté le ).
- « Google's MapReduce patent : what does it mean for Hadoop? », sur Ars Technica (consulté le ).
- BlobSeer 2010, p. 10
- Mars 2012, p. 266