Tags:
create new tag
, view all tags

Stage de Alexandre Sevin - DUT Dijon - [10/04/17 au 16/06/17]

Important : cette page est réservée au suivi du stage, merci de ne pas la modifier

Informations générales pour les stagiaires

Pour toute information concernant ce stage : contacter Thomas B., Anais


Anais : anais.oberto@astro.unistra.fr (Batiment Sud, tél : 52493)

Sujet

Stage (Avril - juin 2017)

Avril

  • 10, arrivée
  • 10, présentation des métiers et services
10 :
  • Installation au poste de travail
  • Decouverte des base de données NoSQL (4 grands types)
  • Redaction d'un document regroupant toute les recherches
11 : 12 :
  • Connexion à la base de données PostgreSQL + déplacement du répertoire des données.
  • Debugage de Postgresql (2 versions installées)
  • Import de Simbad grâce à pg_restore (Tout sauf la table basic_data, à refaire)
  • Essai d'installation de la librairie pgshere pour gerer le type opoint dans la table basic_data
  • Recherche concernant l'installation de Cassandra
13 :
  • Installation de la derniere version de JDK + installation de Cassandra.
  • Recherche concernant Sqoop afin de faire le transfert des données entre PostGreSQL et Cassandra.
  • Lecture de rapport de stage concernant le BigData (recherche d'information sur le twiki des anciens stagiaires).
  • Recherche d'autre base de données intéressante afin de réaliser le BenchMark.
18 :
  • Installation de la librairie "pgsphere"
  • Import de la base de donnée.
  • Mesure du temps des requêtes
  • Recherche pour pouvoir exporter de postgreSQL -> Cassandra
  • Installation de MySQL Workbench et Dbeaver(abandonné)
  • Debut de la migration entre la base PostgreSQL et MySQL (stopper car trop long)
  • Debut de rédaction du rapport
19
  • Debut de la migration (Abandonné)
  • Installation de Jupyter Notebook
  • Commencement de la rédaction du rapport
  • Installation de Spark.
20
  • Migration vers MySQL
  • Installation de spark-cassandra-connector
  • Installation de spark
  • Essai de connexion dans Spark -> erreur de connexion ( java.io.IOException: Failed to open native connection to Cassandra at {127.0.0.1}:9042
  • Installation de Netbean
  • Récupération des fichiers .csv sur le ssh (simrd)
  • Essai d'un COPY ... FROM dans une table cassandra
21
  • Problème avec Cassandra. Lors de ma connexion dans la matinée, j'ai eu l'erreur suivante : "Connection error: ('Unable to connect to any servers', {'127.0.0.1': error(111, "Tried connecting to [('127.0.0.1', 9042)]. Last error: Connection refused")})". J'ai essayé de modifier le fichier cassandra.yaml -> Sans succès.
  • Reinstallation de "cassandra-driver" (pip install cassandra-driver)
  • Quand j'éxecute la commande cqlsh ->Python Cassandra driver not installed, or not on PYTHONPATH. You might try "pip install cassandra-driver".
  • Suppression puis ré-installation de Cassandra
  • Quand j'éxécute la commande cqlsh -> Même problème que précédemment
  • Suppression puis ré-installation d'anaconda3
  • Quand j'éxécute la commande cqlsh -> Toujours le même problème
  • Utilisation de la commande ""sudo pip install cqlsh"
  • Quand j'éxécute la commande cqlsh ->Traceback (most recent call last):
    File "/usr/bin/cqlsh.py", line 168, in <module>
    from cqlshlib import cql3handling, cqlhandling, pylexotron, sslhandling, cqlshhandling
    ImportError: cannot import name cqlshhandling
  • Problème d'espace sur la machine dans /var/cache/apt/archives/. Impossible d'installer des nouveaux paquets (ré-installation de Cassandra).
  • Envoi d'un mail à Thomas Keller pour pour régler les problèmes sur la machine (espace + cassandra).
  • Rédaction du rapport
24 :
  • Ré-installation d'Ubuntu sur la machine
  • Ré-installation de logiciel (Postgres, Cassandra, Netbeans)
  • Connexion au cluster Cassandra en Java
  • Voir pour gérer les jointures (liste ?)
25:
  • Import de la base de donnée dans Postgres (1 avec les coordonnées obtenu grace à pgsphere et une sans)
  • Export des données de la base sans coord dans un fichier csv pour l'import dans Cassandra
  • Ecriture d'un programme pour convertir une requetes CREATE SQL en CQL
  • Import dans cassandra -> Erreur du type : Failed to import 13 rows: ParseError - Failed to parse 2008-12-05 : invalid literal for int() with base 10: '2008-12-05', given up without retries
  • Recherche de solutions -> Lorsque l'on créer une table dans Cassandra, les colonnes sont rangé par ordre alphabétique. Quand nous avions fait l'export des données de la base Postgres, c'est cette ordre qui était dans les fichiers CSV. l'ordre etant different, il y avais incompatibilité de type. -> Problème résolu
26-27:
  • Ecriture d'un programme pour passer d'une table non-ordonné à une table ordonné (CREATE & INSERT)
  • Creation d'un nouveau fichier CSV et import dans la base Cassandra ( 10min et 56.123 seconde pour importer 8 792 481 lignes)
  • Début de création du nouveau schéma pour Cassandra -> Création d'un type Identifier dans Cassandra pour representer les identifiants
  • Ecriture d'un programme java pour récuperer chaque identifiant d'un objet.
  • Test d'insertion de ligne contenant un champ "frozen<Identifier> -> Erreur -> InvalidRequest: Error from server: code=2200 [Invalid query] message="Invalid map literal for identifiers of type frozen<identifier>"
28:
  • Matinée -> Séminaire sur " 2 outils de build pour Java : Maven et Gradle"
  • Récupération de l'UML de Simbad modifié -> quelque table supprimé et quelques champs supprimé
  • Pour chaque table m_ : créer un type dans Cassandra avec tous les champs sauf les 2 clés
  • Si la table à inserer possède juste un champ -> faire une liste. Exemple, pour la table o_type, il faut juste le champ o-type(varchar), donc on fais juste une liste
  • Si la table en possède plus -> faire un type. Exemple, pour la table identifier, qui est lié à la table cat, on crée un type "identifier" qui contient l'id et le cat_name
  • Création de 2 table "basic_data_limit" et "basic_data_test" dans Cassandra. La premiere ne possède que 100 000 objets pour vérifier si le schéma définie est bon. La deuxieme sert à faire les test avant d'inserer les données dans la premiere (on n'est jamais trop prudent).
  • Creation d'un programme java qui insert les données obtenu par la jointure entre basic_data et o_type dans Cassandra (marche) -> Programme à améliorer pour etre utilisé sur toute les tables de la base.
11 au 21 :

Installation et prise en main de l'environnement de travail (docker sur simrd, Postgresql pour avoir une référence de temps d'exécution)

Recherche documentaire/bibliographique sur les bases NoSQL existantes, quelles différences avec une base relationnelle ?

Faire quelques tutoriels d'utilisation basique de bases NoSQL, se familiariser avec les librairies clientes (Python?, Java??)

24- :

Pour une techno qu'on aura sélectionnée :

  • installation dans le docker
  • Extraction des données de la base SQL Simbad et mise en forme pour ingestion dans une base NoSQL
  • Test avec des requêtes typiques

Mai

02 mai :

  • Amelioration du programme pour gerer toute les tables
  • Reste à faire :
  • Gerer les apostrophes dans les differents Strings
  • Gerer les clé etrangères
03-05 :
  • Absent (Maladie)
09 :
  • Bug de cassandra -> Connection error: ('Unable to connect to any servers', {'127.0.0.1': error(111, "Tried connecting to [('127.0.0.1', 9042)]. Last error: Connection refused")})
  • Rédaction du rapport
10 :
  • Bug résolu -> il faut supprimer les commitLog et restart Cassandra
  • Finition du programme -> il gère les apostrophe, les clés étrangères, les doubles jointures correctement
  • Ajout des tables Identifier/Cat et has_bib_ref/bib_ref
  • Pour l'instant, les champs text null sont remplacé par un text qui vaut "null" car le programme plantait quand un String avais la valeur null. A modifier pour rendre plus efficace mais pas obligatoire.
11 :
  • Ajout de toute les autres tables et amélioration du programme
12 :
  • Début de l'ajout des données dans la "vrai" table basic_data
  • Table otype -> ok
  • Table fluxes -> Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
  • Modification de la VM dans Netbeans puis retest
  • Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
  • Passage de la mémoire utilisé par Netbeans à 8192
  • Modification de la requete. Au lieu de récupérer tous les résultats, on récupère tous ceux qui commence par 1 puis 2, ect.. jusqu'à 9
15 :
  • Rédaction d'un doc Excel qui recense les temps d'éxécution du programme pour chaque table(voir doc plus bas)
16 :
  • Fin de l'éxécution du programme sur toute les tables.
  • Fin de la rédaction du tableau
  • Installation de cstore_fdw
  • Problème pour écrire les requêtes pour réaliser le benchmark (Impossible de récuperer juste 1 élément dans une liste, il faut récuperer la liste en entière). De plus, on ne peut pas faire de requète sur un élément d'une liste.
  • select fluxes.filter_name from basic_data where oid4 =12182;

17 :
  • Message d'erreur quand je veux faire cette requete : select fluxes.filter_name from basic_data where oid4 =12182;

  • InvalidRequest: Error from server: code=2200 [Invalid query] message="Invalid field selection: fluxes of type set<frozen<fluxes>> is not a user type"

  • Changement dans la base Cassandra. Au lieu de mettre tous les objets dans une liste, j'ai plutôt opter pour faire une colonne par table et au lieu d'être une liste, c'est une grande chaîne de caractère qui va contenir tous les objets associé.
  • Exemple pour la table otype -> "otype=**,otype_bin=-312546122;otype=*,otype_bin=312546122"
18-19 :
  • Message d'erreur lors de la connexion à Cassandra -> Connection error: ('Unable to connect to any servers', {'127.0.0.1': error(111, "Tried connecting to [('127.0.0.1', 9042)]. Last error: Connection refused")})
  • Suppression des CommitLog comme l'autre fois pour régler le problème -> n'a rien changer
  • Recherche concernant cstore_fdw pour voir si on peux modifier une table en normal en "foreign table" -> On ne peux pas le faire directement, j'ai donc repris la création à partir du dump SQL de simbad et j'ai modifié la synthaxe de crétaion de la table
  • Création de la table basic_data sous cstore.
  • Insertion des données grâce à la ocmmand COPY -> ERROR: value out of range: overflow
  • Peut-être que l'extension ne supporte pas 8 millions de ligne à copier d'un coup ? -> Essaie avec seulement les objets dont oid4 commence par 1 (879063)-> Même problème
  • Essai avec 100 000 lignes -> Ca marche
  • Recherche de la limite max
  • Test succesif de 200 000, 300 000, 400 000 -> Marche, Marche , ne marche pas
  • Essai avec 350 000, 390 000, 395 000 et 400 000 -> Marche pour les 4
  • Essai avec un million -> Marche
  • Modification de la table cstore -> Changement double en real et real en float 6 -> Insertion des 8 millions de ligne réussi
22:
  • Début de la rédaction du Benchmark sous forme de tableau.
  • Pour l'instant, il contient les temps des requêtes sous Postgres (sans cstore) et Postgres (avec cstore) sous 2 formes :
  • Les temps avec seulement la table basic_data sous la forme d'une cstore table et avec toute les tables sous la forme de table cstore table (basic_data, otype, fluxes, has_measurements, cat)
23:
  • Debug constant de Cassandra ( des fois, message d'erreur connexion refused, des fois non)
  • Creation d'une liste par champ (otype, bibcode, title, cat, ect...) puis insertion des données.
  • Message d'erreur : com.datastax.driver.core.exceptions.TransportException: [localhost/127.0.0.1:9042] Connection has been closed lors de l'insertion des données (oid4 168037)
  • Rédaction du rapport
24:
  • Dossier var/lib/cassandra déplacé dans /data/cassandra (message lors du démmarage du PC comme quoi le dossier était plein)
  • Amélioration du programme pour gérer les différents cas d'insertion (liste / chaine de caractère)
  • Modification du Benchmark
29:
  • Page titre, remerciement, intro et 1ere partie dispo sur le twiki (Document rédigé)
  • Insertion des données dans Cassandra (final)
  • Installation d'elasticsearch
30:
  • Bug de Cassandra (connection refused)
  • Installation de la version 2.4.5 d'elasticsearch pour pouvoir installer elasticsearch-head (application graphquie afin de pouvoir mieux visualiser les documents)
  • Prise en main de elasticsearch sur le terminal et en Java
  • Commentaire du programme de Cassandra
  • Rédaction du rapport
  • Essai d'installation d'une librairie pour utiliser elasticsearch (ne marche pas)
  • Je pense ecrire chaque document JSON 1 par 1 ( grâce au programme ), l'écrire dans un fichier et l'éxècuter.
  • Essai avec 100 requetes elasticsearch -> Il faut mettre une tempo de 1 milliseconde, sinon tout les documents ne sont pas insérer.
  • Juste pour l'écriture dans le fichiers + insertion dans elasticsearch -> + de 2H en théorie, cette méthode risque d'etre extrement longue, je vais faire des recherches pour trouver quelque chose de plus rapide
31 :
  • Test sur la création de document JSON (utilisation de la librairie JSON simple)
  • Début rédaction du programme : on va récuperer les oid4 par paquets (1,2, etc...) puis on va les traiter 1 par 1. Pour chaque id, on va commencer par créer le document JSON avec les données de base de basic_data puis on va récuperer les données associées à toute les autres tables afin de complété le document. Si la données vaut null, on ne l'insere pas (ce n'est pas un problème, il n'est pas obligatoire de remplir tout les champs dans elasticsearch).
  • Futur problème -> le temps d'éxécution du programme risque d'être extrement long ( environ 15 minutes pour 100 000 lignes, sans compter la création du document et l'insertion dans elasticsearch)
  • Elasticsearch peut t-il supporter 8 millions de document ?
  • Rédaction du rapport

Juin

1 :

  • Programme pour inserer les données dans elasticsearch -> fonctionnel
  • Lancement du programme (15h02)
  • Redaction du rapport
2 :
  • Correction du programme d'elasticsearch -> il y avais un problème avec les quotes dans les différentes chaines de cractères.
  • Aujourd'hui, Cassandra marche -> fin des insertions
  • Changement des list<int> dans Cassandra, on ne peux pas faire de recherche dessus, changement en list<text>
  • Lancement du proghramme d'elasticsearch pour le week-end
  • Rédaction du rapport
3-8 :
  • Redaction du rapport
  • Changement pour le programme d'elasticSearch -> Ecriture de chaque objet dans un fichier puis realisation de l'insertion en python

Liens

http://simbad.u-strasbg.fr/Files/simdump (dump de la base à restorer àavec pg_restore)

http://simbad.u-strasbg.fr/Files/pgsphere.tgz (extension à installer pour avoir les types spécifiques à l'astronomie)

Schéma de la base SIMBAD (pdf)

Qu'est-ce que NoSQL :

What is NoSQL

NoSQL Databases: a Survey and Decision Guidance

Benchmarks de différentes bases, en utilisant le dataset A billion taxi rides in NYC :

http://tech.marksblogg.com/benchmarks.html

Liens vers différentes technologies "NoSQL" :

Cassandra Data Model :

http://docs.datastax.com/en/archived/cassandra/1.0/docs/ddl/index.html

mais aussi (pas NoSQL au sens strict du terme, mais intéressant) :

Versions testables

Document rédigés

Documentation

Travail post stage éventuel

Liste des améliorations à envisager

Exemples de recherches SIMBAD

Bugs connus

*
Topic attachments
I Attachment Action Size Date Who Comment
PDFpdf Rapport_Sevin.pdf manage 369.2 K 2018-05-31 - 22:18 ThomasBoch  
Topic revision: r52 - 2018-05-31 - ThomasBoch
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback