Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
enseignement:tp:bda:spark:2016 [2016/11/07 14:50] ecoquery |
enseignement:tp:bda:spark:2016 [2016/11/08 08:40] (Version actuelle) ecoquery [Jointure avec Object] |
||
---|---|---|---|
Ligne 2: | Ligne 2: | ||
L' | L' | ||
+ | |||
+ | Ce TP est à faire en binôme (les mêmes que pour le TP Hadoop). | ||
+ | Il est demandé de rendre un rapport décrivant le déroulement du TP et contenant en particulier le code commenté pour le **lundi 14/ | ||
Chaque binôme dispose d'une machine cloud (ip dans tomuus) pour exécuter des job Spark. | Chaque binôme dispose d'une machine cloud (ip dans tomuus) pour exécuter des job Spark. | ||
Ligne 11: | Ligne 14: | ||
* Une fois le conteneur démarré avec la commande fournie, un shell est ouvert sur le conteneur. | * Une fois le conteneur démarré avec la commande fournie, un shell est ouvert sur le conteneur. | ||
* Pour copier un fichier dans le conteneur: '' | * Pour copier un fichier dans le conteneur: '' | ||
- | * Pour copier un fichier dans hdfs, il faut d' | + | * Pour copier un fichier dans HDFS, il faut d' |
- | * L' | + | * L' |
- | Lancer le conteneur (depuis '' | + | Lancer le conteneur (depuis '' |
<code shell> | <code shell> | ||
sudo docker run --hostname=quickstart.cloudera --privileged=true -t -i --name cloudera cloudera/ | sudo docker run --hostname=quickstart.cloudera --privileged=true -t -i --name cloudera cloudera/ | ||
</ | </ | ||
- | Récupérer l' | + | Récupérer l' |
- | Importer les données dans hdfs (dans le répertoire | + | Importer les données dans HDFS (dans le répertoire |
- | Dans la suite de ce TP, on va reproduire sur Spark les requêtes des TPs précédents | + | Dans la suite de ce TP, on va reproduire sur Spark les requêtes des TPs ([[enseignement: |
- | ===== Wordcount ===== | + | ===== Tutoriel et Wordcount ===== |
+ | |||
+ | Lire le [[http:// | ||
+ | |||
+ | Remarques: | ||
+ | * Spark permet d' | ||
+ | * Utiliser '' | ||
+ | * On peut remarquer que les calculs effectifs produisent des logs visibles depuis le shell Spark. Essayer de comprendre à quel moment les calculs sont effectués. | ||
===== Statistiques sur Source ===== | ===== Statistiques sur Source ===== | ||
+ | Reprendre les questions de calcul de statistiques pour chaque objet dans les sources (répertoire '' | ||
+ | Calculer le résultat de la requête suivante: | ||
+ | <code sql> | ||
+ | SELECT object_id, count(*), max(source_id), | ||
+ | FROM source | ||
+ | WHERE object_id IS NOT NULL | ||
+ | GROUP BY object_id | ||
+ | </ | ||
+ | Donner ensuite l' | ||
+ | |||
+ | Remarques: | ||
+ | * Un RDD Spark est une source de données comprenant éventuellement plusieurs fichiers comme c'est le cas dans Hadoop Map/Reduce. | ||
+ | * Spark s' | ||
+ | * filtrer les données d'un RDD (équivalent du WHERE en SQL): '' | ||
+ | * transformer chaque ligne d'un RDD: '' | ||
+ | * aggréger (équivalent à GROUP BY + fonctions d' | ||
+ | * Les RRD n'ont pas vocation à être lus directement mais peuvent exploités comme suit: | ||
+ | * il est possible de sauver un RDD dans le HDFS via //e.g.// '' | ||
+ | * il est également possible de calculer un unique aggrégat comme résultat via '' | ||
+ | * d' | ||
+ | * schémas: {{: | ||
+ | | ||
===== Jointure avec Object ===== | ===== Jointure avec Object ===== | ||
+ | Reprendre la requête suivante issue du [[enseignement: | ||
+ | <code sql> | ||
+ | SELECT o.objectId, count(*) as cnt, avg(flux_Gaussian) flxG_avg | ||
+ | FROM Source s join Object o ON s.objectId = o.objectId | ||
+ | WHERE earliestObsTime <= 50985.0 | ||
+ | AND s.objectId IS NOT NULL | ||
+ | GROUP BY o.objectId | ||
+ | </ | ||
+ | Coder cette requête dans Spark. On pourra utiliser la transformation '' | ||