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 MongoDB.

Le jeu de données est issu du projet Petasky. Il s'agit de données astronomiques simulant le résultat d'observations via le futur télescope 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). 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, 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 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 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.

<note important>L'espace disque des machines a été réduit à 10GB. Les données ne tiendront donc pas sur une seule machine.</note>

<note tip>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 TP introduction à MongoDB en M1).</note>

<note tip>Les temps de traitement peuvent être longs. Il est conseillé d'installer un utilitaire comme screen afin de pouvoir se déconnecter sans interrompre les traitements.</note>

<note tip>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.</note>

<note warning>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

</note>

<note important>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

</note>

Liens utiles