Vous êtes sur la page 1sur 3

TP – Pig et Hive

L’objectif de ce TP consiste à concrétiser les connaissances acquises dans le cours sur les langages
d’abstraction Pig et Hive faisant partie de l’écosystème de Hadoop. Afin de mieux comprendre les
instructions Pig, il est recommandé de consulter le document récupéré de votre enseignante inspiré
du cours : « Outils Hadoop pour le BigData » de Pierre Nerzic Université de Rennes 1.

Partie I - Pig
1. Récupérer les deux fichiers « clients.csv » et « achats.csv ».
2. Connectez-vous à Pig en tapant tout simplement pig
3. Charger les données du fichier « achats.csv » à l’aide des commandes suivantes :
Achats = LOAD ‘achats.csv’ AS (idachat, idclient, montant) ;
4. Afficher la relation ‘achats’ créée à l’aide de l’instruction :
DUMP achats
5. Regrouper les achats par clients :
achatsparclients = GROUP achats BY idclient ;
6. Afficher le résultat
7. Calculer et afficher le nombre d’achats de chaque client :
totaux = FOREACH achatsparclients GENERATE group,
COUNT(achats.idachat) AS total ;
Que représentent total et group ici ?
8. Afficher le résultat.
9. Afficher le plan d’actions prévu pour calculer la relation totaux en utilisant l’opération
EXPLAIN.
10. Charger le fichier ‘clients.csv’ et afficher le résultat. 
11. Afficher les noms des clients avec le nombre d’achats qu’ils ont fait. Pour ceci, il faut faire une
jointure : (il faut faure un dump à chaque fois pour vérifier les résultats intermédiaires).
jointure = JOIN clients BY idclient, totaux BY group ;
resultat = FOREACH jointure GENERATE nom, total ;
12. Afficher les noms et les nombres d’achats des 3 clients qui ont fait plus d’achats dans l’ordre
décroissant. Pour ceci, il faut taper les instructions suivantes :
Resultat = ORDER resultat BY total DESC ;
resultat = LIMIT resultat 3 ;

Partie II – Hive
On se propose de créer une base de données contenant les tables suivantes :

int

1
1. Récupérer les fichiers hotel.csv, clientH.csv et reservation.csv.
2. Dans un fichier creation.hql, écrire les requêtes permettant de :
 Créer une base de données nommée ag_t : create database ag_t ;
 Créer la table hotel en utilisant la requête suivante :
create table hotel(id_h int, nom_h string, adresse string, classe int,
nb_ch int) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS
TEXTFILE ;
 Créer les tables client et reservation.
On tape la requête suivante pour désigner la base à utiliser :
use ag_t ;
3. Exécuter les commandes du fichier creation.hql en tapant : hive –f <chemin et nom
du fichier>.
Afin de vérifier les résultats, lancer hive et lister les tables de la base de données ag_t en
tapant :
use ag_t ;
show tables ;
4. Dans un fichier chargement.hql, écrire les requêtes permettant de remplir ces tables par les
données issues des fichiers clients.csv, hotels.csv et reservation.csv. Pour
ceci, taper :
use ag_t ;
LOAD DATA LOCAL INPATH 'clients.csv' into table client ;
Et terminer de même pour les autres tables.
5. Exécuter ce fichier.
6. Appliquer des requêtes de sélection sur ces tables :

 Afficher les cin et les nom_prenom des clients qui ont réservé plus que 4 nuitées pour ceci,
on doit faire une jointure entre la table client et la table réservation selon le champ cin.
select client.cin, nom_prenom from client join reservation on
(client.cin = reservation.cin ) where nb_nuitees > 4 ;

 Afficher les id_h et les nom_h des hôtels dans lesquels il y a plus qu’une réservation. Pour
ceci, on doit faire une jointure entre hotel et reservation selon le champ id_h et
utiliser les clauses group by et having  ainsi que la fonction count.
select h.id_h , h.nom_h from hotel h join reservation r on (h.id_h =
r.id_h) group by h.id_h , h.nom_h having count (*) >1 ;
7. On désire maintenant créer une table bucket_hotel identique à la table hotel mais
partitionnée selon la colonne adresse qui représente la ville et clusterisée en 2 selon la classe
(le nombre d’étoiles). Pour ceci il faudra commencer par activer les propriétés suivantes :
set hive.exec.dynamic.partition=true ;
set hive.exec.dynamic.partition.mode=nonstrict ;
set hive.exec.max.dynamic.partitions=20000 ;
set hive.exec.max.dynamic.partitions.pernode=20000 ;
set hive.enforce.bucketing = true ;

2
puis taper :
create table bucket_hotel(id_h int, nom_h string, adresse string,
classe int, nb_ch int) partitioned by (adresse string) clustered by
(classe ) into 2 buckets ROW FORMAT DELIMITED FIELDS TERMINATED BY
'\t' STORED AS TEXTFILE ;
8. Charger la nouvelle table par les données de la table hotel :
insert into table buck_hotel partition (adresse) select classe, id_h,
nom_h, nb_ch, adresse from hotel ;
9. Lister le contenu du répertoire : /user/hive/warehouse/ag_t.db/buck_hotel sur hdfs.
Que remarquez-vous ? Explorez le résultat obtenu.
10. Ajouter une colonne prix à la table reservation puis vérifier le résultat (desc
reservation) :
alter table reservation add columns (prix float) ;
11. Supprimer la colonne prix ajoutée :
alter table reservation replace columns (cin string, id_h int,
date_debut string, nb_nuitee int) ;

12. Supprimer la table hotel.


drop table hotel ;

Vous aimerez peut-être aussi