Plateforme BigData (Cloudera) sur un Cloud: automatisation avec Cloudify

Le Big Data est un sujet incontournable chez FastConnect: pour élargir son business, il est maintenant critique d’élargir son champ de vision à l’aide des données externes et les données non-structurées et sous-exploitées.
Hadoop et son écosystème répond à ces challenges, et cette plateforme Big Data devient de plus en plus mature grâce aux différents éditeurs comme Cloudera, HortonWorks, MapR ou Pivotal.

Mais la mise en œuvre de cette plateforme constitue aussi un challenge:

  • Pour répondre à des problèmes complexes, la communauté a développé plusieurs outils indépendants: Sqoop, Flume, HBase, HDFS, etc.
    La multiplicité de ces outils rend le déploiement plus complexe.
  • Pour traiter des volumes conséquents, le déploiement de la plateforme doit se faire sur plusieurs nœuds. De plus, on veut pouvoir augmenter ou réduire le nombre de nœuds de manière élastique en fonction du besoin.
  • Avec un grand nombre de nœuds, on est sujet à plus de risque de pannes, ce qui nécessite une attention particulière sur la HA (High Avaibility / Haute Disponibilité)

L’article présent traite de l’automatisation à l’aide de Cloudify du déploiement et de la configuration sur un Cloud d’une telle plateforme, basée sur la distribution Cloudera de Hadoop.

Besoins

une plateforme BigData configurée

Nous souhaitons effectuer des traitements sur un gros volume de données et obtenir par exemple des statistiques sur un fait, ou encore faire des prédictions. Oui on souhaite faire du « BigData », et il nous faut une plateforme adéquate déployée et configurée. Une solution serait de se servir de la plateforme pré-installée que propose Cloudera sous forme d’une machine virtuelle « All-in-One »

Oui mais… j’ai vraiment beaucoup de données!!

Ça se corse un peu! Le volume est énorme, tout stocké sur une seule machine ne me permettra pas de bénéficier de la réduction du temps de traitement que nous offre la faculté de distribution du traitement. On voit là une limite du mode StandAlone (All-in-One): il nous faut une plateforme en architecture « distribuée« , et donc plusieurs machines qui servirons de DataNode / TaskTracker (Nœud de stockage de données et de traitement ).

Je n’ai pas assez de budget..

Oui c’est vrai, il faut du budget pour s’offrir une plateforme comportant plusieurs serveurs. Pourquoi ne pas se tourner vers le Cloud? En effet, avec la particularité IaaS du Cloud Computing, il est désormais possible d’obtenir de l’infrastructure (machines virtuelle en l’occurrence) et de payer en fonction de la durée d’utilisation. Ainsi plus besoin d’une plateforme de serveurs physiques, car il est possible de louer des machines virtuelle (VMs) à l’heure chez un fournisseur ( Amazon EC2 par exemple ) ce qui ne nécessite pas forcement un gros budget au départ ;)

Oups… j’ai fait une erreur lors de la configuration: trop longue et répétitive :|

Le fait de louer des VMs pour un certain temps et de les détruite après, entraîne la réinstallation et la reconfiguration de la plateforme chaque fois que le besoin se pose. Cette opération est longue et répétitive quand elle est effectuée manuellement. Aussi, les risques d’erreurs de configuration sont grands. Automatiser le processus permet d’être sûr d’avoir les mêmes configurations d’un déploiement à l’autre, et de gagner considérablement en temps.

Cloudify est un outil qui permet d’effectuer une telle tâche: nous n’avons plus qu’à décrire les procédures d’installation et de configuration de la plateforme, et d’exécuter le tout quand bon nous semble avec une seule ligne de commande: install-application cloudera

Nous pourrons aussi jouir des autres fonctionnalités de Cloudify telles que:

  • Multi-cloud : le prototype hébergé chez un fournisseur public (Amazon EC2 par exemple) pourra être migré facilement sur l’infrastructure interne (Openstack, ou bare metal par exemple)
  • Custom Command : pour automatiser des tâches d’administrations sur l’ensemble des nœuds
  • Gestion du cycle de vie de l’application: pour la gestion de crash (fail over)
  • Élasticité: possibilité d’ajouter à chaud des nœuds DataNode+TaskTracker en cas de besoin
  • Monitoring: avoir une vue d’ensemble du cluster, en connaître la charge et ainsi anticiper l’ajout de nouveaux nœuds

L’application cloudify-cloudera

Cloudify-cloudera est le nom que nous avons donné à l’application Cloudify qui permet de faire tout ce qui a été cité plus haut. Le Cloud utilisé ici est Amazon EC2 (mais Cloudify est Multi-Cloud: cela fonctionne aussi bien sur OpenStack, sur un environnement de développement avec VirtualBox, ou même un datacenter traditionnel [sans virtualisation]).

Les recettes dans leur état actuel permettent d’obtenir une plateforme BigData composée d’un Cloudera Manager et d’une distribution Hadoop repartie sur deux types de noeuds : Master et Slave. Un service de base de données MySQL est aussi disponible en cas de besoin. En plus de la distribution Cloudera, nos recettes sont capables de déployer un MongoDB en mode Sharding afin d’y effectuer du MapReduce.

archi cluster cloudera on demand

Nous nous servons de Cloudera Manager (CM) pour configurer les composantes de la plateforme. CM expose une API REST pour permettre son pilotage programmatiquement, dans notre cas, par des scripts Groovy exécutés par Cloudify.

Les Briques (noeuds) et services installés

L’application installe quatre principaux middlewares :

  • Cloudera Manager
  • Cloudera distribution of Hadoop
  • La base de données MySQL : optionnelle
  • La base de données MongoDB: Sous forme de cluster (mode sharding).

L’installation et l’implémentation de ces services se font sur des instances de machines, appelées nœuds du cluster.

Les services Cloudera supportés sont:

ZOOKEEPER, HDFS, MAPREDUCE, OOZIE, HIVE, HBASE, SQOOP, FLUME, HUE

Le concept de Hadoop veut lui-même que l’on dispose principalement de deux entités ou types de rôle : le maître (Master) (NameNode, JobTracker) et l’esclave (Slave) (DataNode, TaskTracker). Le service MongoDB étant déployé en mode sharding, il est nécessaire pour son architecture de lui fournir aussi deux types d’instances : master et slave. MySQL quant à lui sera déployé sur une instance de machine propre à elle.
Si nous récapitulons, nous pouvons dire que notre système sera composé principalement de quatre types de noeuds (service Cloudify).

Cloudera Manager : (code : cdh4-manager)

Représente une instance de Cloudera Manager. Ceci permet d’administrer l’ensemble du cluster via une interface Web.

Master CDH : (Code : cdh4-master)

Nœud sur lequel seront installés les composantes NameNode, JobTracker, et tout autre service ou composante de service Cloudera qui implémente une division Master/ Slave, à l’instar de MongoDB (partie Master).

Slave CDH : (Code : cdh4-slave)

Nœud sur lequel seront installés les composantes DataNode, TaskTracker, et tout autre service ou composante de service Cloudera qui implémente une division Master/ Slave, à l’instar de MongoDB (partie Slave).

MySQL : (Code : mysql-cdh4) sur lequel sera installé le middleware MySQL.

web-ui-cloudify

Opérations annexes et/ou d’administrations

Backup / Restauration HDFS

Une problématique assez fréquente est la sauvegarde des données potentiellement résultantes des traitements effectués à la fin de l’utilisation du cluster, de façon à les réimporter une prochaine fois pour continuer les traitements.

Deux custom commands ont été développées et implémentées aux noeuds de type cdh4-master pour cet usage. La commande backup prend en paramètre le nom du répertoire à sauvegarder sur Amazon s3 ; la commande de restauration prend en paramètre le nom de la sauvegarde à restaurer.
Il est à noter que le nom de fichier à persister sur S3 est généré de façon intelligente selon un pattern « hdfs-backup-yyy-mm-dd~hh.mm.ss » ce qui permet de s’y retrouver très rapidement lorsqu’on cherche à restaurer une sauvegarde précise.
L’invocation de ces commandes via le Shell Cloudify se fait de la façon suivante :

Invoke cdh4-master s3HdfsBackup /test
// Sauvegarde un répertoire HDFS /test dans un repertoire « hdfs-backup-yyy-mm-dd~hh.mm.ss »

Invoke cdh4-master s3HdfsRestore /hdfsBackups/hdfs-backup-yyy-mm-dd~hh.mm.ss /test
 // Restaure le contenu du répertoire s3 hdfs-backup-yyy-mm-dd~hh.mm.ss dans un répertoire /test du HDFS

Une autre façon de faire est d’exploiter le montage des EBS d’Amazon dans Cloudify: on aurai pu démonter les EBS en cas de destruction du Cluster, pour les re-monter lorsqu’on a besoin à nouveau du Cluster. Ce mécanisme est d’ailleurs nécessaire pour ne pas perdre les données en cas de crash d’une VM.

Mongo sharding

Possibilité offerte via custom commands d’activer le sharding sur des bases de données et collections MongoDB.

Conclusion

Au terme de cet article, nous avons présenté quelques besoins qui se posent concernant la gestion d’une plateforme BigData et les solutions que nous y avons apportées, se résumant en l’automatisation du déploiement et de la configuration. Le déploiement opéré par Cloudify est multi-cloud, c’est-à-dire que le prototype développé sur Amazon (pour des raisons de budget) pourra être migré facilement sur votre plateforme Openstack interne. De plus nous bénéficions des fonctionnalités d’auto-réparation offerte par Cloudify (remplacement et reconfiguration des composants en panne).

L’utilisation de l’application développée est aisée. Le projet n’est pas clos, nous continuons d’y ajouter des fonctionnalités et améliorations. Quelques évolutions à venir :

  • Possibilité d’utiliser des EBS comme support de stockage: ce qui rassurerait l’utilisateur quant à la sauvegarde de ses données
  • Custom command pour ajout / suppression de services cloudera
  • Combiner Puppet / Cloudera: Puppet permettra de gagner en temps et en performance pour tout ce qui est installation et déploiement, tandis que Cloudify gérera les dépendances entre les services et la configuration du cluster une fois le tout installé.
  • Custom command pour importer / exporter des Job Oozie au format XML,

On démontre ici une fois de plus, la puissance de l’association BigData + Cloud, ainsi que les nombreuses possibilités que nous offre l’outil Cloudify.