====== Réplication et distribution des données: mise en oeuvre sur MongoDB ====== Ce TP a pour objectif le chargement et l'exploitation d'un large volume de données. La technologie utilisée sera [[https://www.mongodb.org/|MongoDB]]. Le jeu de données est issu du [[http://com.isima.fr/Petasky/|projet Petasky]]. Il s'agit de données astronomiques simulant le résultat d'observations via le futur télescope [[http://www.lsst.org/lsst|LSST]]. Bien qu'on ne considère ici qu'une petite partie de ces données (environ 12GB non compressées), elles nécessitent déjà une réflexion sur leur chargement, leur répartition et leur réplication. ===== Travail demandé ===== Le jeu de données consiste en une extraction de données astronomiques issues des prises de vue d'un télescope de grande envergure. Les données sont disponibles sous forme de fichiers CSV compressés sur la machine ''ps-data'' (voir la section [[#informations_techniques|informations techniques]]). Une description succinte des fichiers CSV est disponible sous la forme un schéma relationnel exprimé en SQL. Ces descriptions sont également disponibles sur la machine ''ps-data''. Le chargement des données pourra s'appuyer sur l'utilitaire ''mongoimport'' qui permet un chargement via des fichiers CSV. On essaiera au maximum de faire que les données dans mongo soient au format qui leur corresponde (e.g. un int ou un float et non un string si la donnée est numérique). Si un document (un tuple) possède un champ ''NULL'', ce champ devra être supprimé du document mongo. On configurera le stockage en mongo pour répondre efficacement aux requêtes suivantes (données ici en SQL, à traduire en script Mongo, [[https://rickosborne.org/blog/2010/02/infographic-migrating-from-sql-to-mapreduce-with-mongodb/|cheat sheet]]): * select * from source where sourceid=29710725217517768 * select sourceid, ra, decl from source where objectid=430209694171136 * select sourceid,objectid from source where ra between 358.05 and 358.09 and decl between 3.039 AND 3.067 * select objectid, count(object(id)) from source group by objectid * select objectid, avg(flux_Gaussian), avg(sourceWidth_SG) from source where ra between 358.05 and 358.09 group by objectid * select * from source join object on (source.objectid = object.objectid) where ra between 358.05 and 358.09 ===== Rendu ===== On rendra un rapport au format pdf pour le dimanche **21/02/2015** sur [[http://tomusss.univ-lyon1.fr|tomuss]], dans la case ''Rendu_TP3'' de l'UE ''TI4'': * Une description technique de la mise en place du cluster mongo et de la procédure de chargement des données. * Un argumentaire sur le(s) choix de l'architecture du cluster mongo, ansi que sur les choix de stockage (e.g. quels index ?). * Une évaluation des performances, y compris concernant le chargement et, le cas échéant, comparant plusieurs manières d'exécuter les requêtes. On essaiera également de comparer plusieurs configurations de distribution/réplication. * Une annexe contenant les scripts utilisés pour tous les traitements. ===== Informations techniques ===== Les données à charger se situent sur la machine ''ps-data'' (IP ''192.168.77.32''), login ''data'', répertoire ''/data''. Vous disposerez dans [[http://tomusss.univ-lyon1.fr|tomuss]] des adresses IP de 7 machines ubuntu avec MongoDB 3.2.1 installé avec une configuration par défaut. Les ports suivants sont accessibles aux autres machines: 27017,27018,27019,37017,37018,37019. Les 3 premiers sont standards pour mongo, les 3 autres peuvent être utiles pour démarrer plusieurs services mongo sur une même machine. Les clés SSH sont les mêmes que celles des TP de TI3-Administration des BD. L'espace disque des machines a été réduit à 10GB. Les données ne tiendront donc pas sur une seule machine. Il est conseillé de tester la réplication et la distribution des données sur un petit jeu de données (par exemple la collection zips du {{:enseignement:bdav:mif18-tp-mapreduce-zips.pdf|TP introduction à MongoDB en M1}}). Les temps de traitement peuvent être longs. Il est conseillé d'installer un utilitaire comme [[https://www.gnu.org/software/screen/manual/screen.html|screen]] afin de pouvoir se déconnecter sans interrompre les traitements. Les données, comme les schémas, sont volumineux. Pensez à //scripter// vos traitements. Pensez également à la reprise d'un traitement après interruption sans avoir à tout recommencer. Le package d'installation de mongod démarre le serveur (avec la configuration par défaut). Pour l'arrêter (et démarrer les serveurs à la main), il faut arrêter le service correspondant:sudo service mongod stop Ajouter du swap à toutes les machines, cf https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-12-04 sudo dd if=/dev/zero of=/swapfile bs=1024 count=512k sudo mkswap /swapfile sudo swapon /swapfile free -m **Liens utiles** * [[https://docs.mongodb.org/manual/|Documentation MongoDB]], [[https://docs.mongodb.org/manual/core/replication-introduction/|réplication]], [[https://docs.mongodb.org/manual/core/sharding-introduction/|distribution]] * {{:enseignement:bdav:mif18-tp-mapreduce-zips.pdf|TP introduction à MongoDB en M1}}