Traitement du Big data
avancé
Chapitre 1: Introduction
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 1
Objectifs de ce cours
• Ce module a pour objectif de construire un programme
à base de MapReduce et intégrer Hadoop HBase.
• Ce cours permet aux étudiants de découvrir également la
notion du stockage distribué et le traitement de gros
volumes de données structurées et non structurées pour
obtenir de meilleures connaissances métier en utilisant
plusieurs outils.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 2
Objectifs de ce cours
• A l’issue de ce cours, l'étudiant ou l'étudiante sera en mesure
de :
• Appréhender le fonctionnement d’Hadoop
• Identifier l’écosystème : quels outils pour quels usages ?
• Manipuler les principales commandes shell d’interaction
avec Hadoop
• Émettre des requêtes SQL avec Hive et HCatalog
• Créer des traitements de données avec Pig
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 3
Plan du Cours
1. Chapitre 1: Rappel HADOOP
2. Chapitre 2: Pig & Hive
3. Chapitre 3: HBase et Cassandra
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 4
Chapitre1: Rappel
Hadoop
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 5
Plan du chapitre 1
1. Historique
2. HDFS et YARN
3. MapReduce
4. Approfondissement sur
MapReduce
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 6
L’écosystème Hadoop:
Historique
• En 2004, Google a publié un document sur leur framework de
traitement interne: MapReduce.
• En 2005, Yahoo a publié une implémentation open source basée sur
ce framework: Hadoop.
• Dans les années suivantes, d'autres frameworks et outils open source
ont été diffusés à la communauté.
• Ces frameworks ont fourni de nouvelles capacités manquantes
dans Hadoop, comme les requêtes ou scripts de haut niveau.
• Aujourd'hui, il y a plus de 100 projets open source pour le big data et
ce nombre continue de croître.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 7
Hadoop : Diagramme de
couches
• Les couches de bas niveau gèrent le stockage et la
planification.
• Les couches de haut niveau concernent les modèles de
programmation et d’interactivité avec l’utilisateur.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 8
HDFS
• HDFS est un système de fichiers distribué:
• Les fichiers et dossiers sont organisés en arbre
• Ces fichiers sont stockés sur un grand nombre de machines de
manière à rendre invisible la position exacte d’un fichier. L’accès
est transparent
• Les fichiers sont copiés en plusieurs exemplaires pour la fiabilité
et permettre des accès simultanés multiples
• HDFS permet de voir tous les dossiers et fichiers de ces milliers de
machines comme un seul arbre, contenant des Po de données,
comme s’ils étaient sur le disque dur local.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 9
HDFS
• Vu de l’utilisateur, HDFS ressemble à un système de fichiers Unix : il y a
une racine, des répertoires et des fichiers. Les fichiers ont un propriétaire,
un groupe et des droits d’accès
• Sous la racine /, il y a :
• des répertoires pour les services Hadoop : /hbase, /tmp, /var
• un répertoire pour les fichiers personnels des utilisateurs : /user
(attention, ce n’est ni /home, ni /users comme sur d’autres systèmes
Unix). Dans ce répertoire, il y a aussi trois dossiers système : /user/
hive, /user/history et /user/spark.
• un répertoire pour déposer des fichiers à partager avec tous les
utilisateurs : /share
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 10
Composants du HDFS
• HDFS est composé de deux composants: NameNode et DataNode. Ceux-ci fonctionnent en
relation maître/esclave
• NameNode émet des commentaires à DataNodes à travers le cluster. Le NameNode est
responsable des métadonnées.
• DataNodes fournit un stockage par blocs.
Il y a généralement un NameNode par cluster, cependant un
DataNode s'exécute sur chaque nœud du cluster.
• NameNode est l'administrateur ou le coordinateur du cluster HDFS. Lorsque le fichier est créé,
le NameNode enregistre le nom, l'emplacement dans la hiérarchie de répertoires et d'autres
métadonnées.
• NameNode décide également quels DataNodes pour stocker le contenu du fichier et se
souvient de ce mappage.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 11
HDFS: écriture d’un fichier
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 12
HDFS: Lecture d’un fichier
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 13
Mode high availability
• Comme le namenode est absolument vital pour HDFS
mais unique, Hadoop propose une configuration appelée
high availability dans laquelle il y a 2 autres namenodes
en secours, capables de prendre le relais instantanément
en cas de panne du namenode initial.
• Les namenodes de secours se comportent comme des
clones. Ils sont en état d’attente et mis à jour en
permanence à l’aide de services appelés JournalNodes.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 14
Commande HDFS
• La commande hdfs dfs et ses options permet de gérer les fichiers et dossiers :
• hdfs dfs -help
• hdfs dfs -ls [noms...] (pas d’option -l)
• hdfs dfs -cat nom
• hdfs dfs -mv ancien nouveau
• hdfs dfs -cp ancien nouveau
• hdfs dfs -mkdir dossier
• hdfs dfs -rm -f -r dossier (pas d’option -fr)
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 15
Commande HDFS
• Pour placer un fichier dans HDFS, deux commandes
équivalentes :
• hdfs dfs -copyFromLocal fichiersrc fichierdst
• hdfs dfs -put fichiersrc [fichierdst]
• Pour extraire un fichier de HDFS, deux commandes possibles :
• hdfs dfs -copyToLocal fichiersrc dst
• hdfs dfs -get fichiersrc [fichierdst]
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 16
Commande HDFS
• Exemple :
• hdfs dfs -mkdir -p livres
• wget [Link]
• hdfs dfs -put dracula livres
• hdfs dfs -ls livres
• hdfs dfs -get livres/center_earth
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 17
API Java pour HDFS
• Hadoop propose une API Java complète pour accéder aux fichiers de
HDFS. Elle repose sur deux classes principales :
• FileSystem représente l’arbre des fichiers (file system). Cette classe
permet de copier des fichiers locaux vers HDFS (et inversement),
renommer, créer et supprimer des fichiers et des dossiers
• FileStatus gère les informations d’un fichier ou dossier :
– taille avec getLen(),
– nature avec isDirectory() et isFile(),
• Ces deux classes ont besoin de connaître la configuration du cluster
HDFS, à l’aide de la classe Configuration. D’autre part, les noms
complets des fichiers sont représentés par la classe Path
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 18
API Java pour HDFS
• Exemple:
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 19
Yarn
• Le succès de YARN est évident: le support de plusieurs application
dans Hadoop.
• Yarn fournit de nombreuses façons aux applications pour extraire de
la valeur des données. Il permet d'exécuter de nombreux applications
distribuées sur le même cluster Hadoop.
• De plus, YARN réduit la nécessité de déplacer les données et prend
en charge une utilisation plus élevée des ressources entraînant une
baisse des coûts.
• C'est une plateforme évolutive
qui a permis le développement
de plusieurs applications sur le HDFS
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 20
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 21
Architecture Yarn
• Le gestionnaire de ressources contrôle toutes les ressources et décide qui obtient quoi.
• Le gestionnaire de nœuds fonctionne au niveau de la machine et est en charge d'une seule
machine.
• Ensemble, le gestionnaire de ressources et
le gestionnaire de nœuds forment le framework
de calcul de données.
• Chaque application obtient un maître
d’application (App Master). Il négocie des
ressources du gestionnaire de ressources et il
communique avec le gestionnaire de nœuds pour
terminer ses tâches.
• Le conteneur est une notion abstraite qui signifie
une ressource physique qui est une collection de CPU, de mémoire disques, réseau et
autres ressources. On peut le voir comme une machine.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 22
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 23
Yarn et MapReduce
• YARN permet aux utilisateurs de lancer des jobs
MapReduce sur des données présentes dans HDFS, et de
suivre (monitor) leur avancement, récupérer les messages
(logs) affichés par les programmes.
• Éventuellement YARN peut déplacer un processus d’une
machine à l’autre en cas de défaillance ou d’avancement
jugé trop lent.
• En fait, YARN est transparent pour l’utilisateur. On lance
l’exécution d’un programme MapReduce et YARN fait en
sorte qu’il soit exécuté le plus rapidement possible.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 24
MapReduce
• L’environnement de programmation MapReduce
simplifie largement l'exécution du code en parallèle. Il
suffit de créer, mapper et réduire les tâches, et on n’a
pas à se soucier des problèmes de synchronisation ou de
concurrence.
• MapReduce est un environnement Java pour écrire des
programmes destinés à YARN.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 25
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 26
MapReduce
• Un job MapReduce comprend plusieurs phases :
• Prétraitement des données d’entrée, ex: décompression des fichiers
• Split: séparation des données en blocs traitables séparément et mise sous
forme de (clé, valeur), ex: en lignes ou en n-uplets
• Map: application de la fonction map sur toutes les paires (clé, valeur) formées
à partir des données d’entrée, cela produit d’autres paires (clé, valeur) en
sortie
• Shuffle & Sort: redistribution des données afin que les paires produites par
Map ayant les mêmes clés soient sur les mêmes machines
• Reduce: agrégation des paires ayant la même clé pour obtenir le résultat final.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 27
MapReduce
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 28
MapReduce
• Au début, YARN se renseigne sur l’emplacement des données auprès du namenode et les
fait décompresser si besoin par les datanodes concernés.
• La phase Split consiste à construire des paires (n° de n-uplet, n-uplet) à fournir aux tâches
Map.
• YARN crée des processus Map sur chaque machine contenant une partie des données et
leur fournit les paires de leur machine successivement.
• Chaque tâche Map analyse ses données et émet ou non une paire. Ça peut consister à
convertir des chaînes en nombres, à faire des calculs, etc.
• YARN trie les paires sortant de Map selon leur clé et les envoie sur la machine qui fait
tourner la tâche Reduce concernée par cette clé.
• Les tâches Reduce reçoivent une liste de paires et effectuent la réduction des valeurs
(max, sum, avg. . . ). Elles émettent seulement la valeur finale. Elles peuvent être mises
en cascade quand il y a beaucoup de paires.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 29
API Java MapReduce
• Un programme Hadoop « natif » est développé en Java, en
utilisant le SDK Hadoop, basé sur le mécanisme d’interfaces.
• Trois classes au minimum au sein d'un programme Hadoop:
• Classe Driver: Main du programme. Informe Hadoop des
différents types et classes utilisés, des fichiers d’entrée/de
sortie, etc.
• Classe Mapper: implémentation de la fonction MAP.
• Classe Reducer: implémentation de la fonction REDUCE.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 30
Classe Driver
• La classe Driver doit au minimum:
• Passer à Hadoop des arguments « génériques » de la ligne de
commande, par le biais d'un objet Configuration.
• Informer Hadoop des classes Driver, Mapper et Reducer par le
biais d'un objet Job; et des types de clef et de valeur utilisés au
sein du programme map/reduce par le biais du même objet.
• Spécifier à Hadoop l'emplacement des fichiers d'entrée sur HDFS;
spécifier également l'emplacement où stocker les fichiers de sortie.
• Lancer l'exécution de la tâche map/reduce; recevoir son résultat.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 31
Classe Driver
• Création de l'objet Configuration:
• On créé ensuite un nouvel objet Job et on indique à Hadoop les classes Driver, Mapper et
Reducer:
• On indique ensuite quels sont les types de clef/valeur utilisés au sein du programme:
• On spécifie l'emplacement des fichiers d'entrée/de sortie:
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 32
Classe Driver
• La méthode setInputFormatClass () est utilisée pour
spécifier comment un mappeur lira les données d'entrée
ou quelle sera l'unité de travail. Ici, nous avons choisi
TextInputFormat pour qu'une seule ligne soit lue par le
mappeur à la fois à partir du fichier texte d'entrée.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 33
Classe Mapper
• La classe Mapper est en charge de l'implémentation de la méthode
map du programme map/reduce.
• Elle doit étendre la classe
[Link]. Il s'agit d'une classe
générique qui se paramétrise avec quatre types:
• Un type keyin: le type de clef d’entrée.
• Un type valuein: le type de valeur d’entrée.
• Un type keyout: le type de clef de sortie.
• Un type valueout: le type de valeur de sortie.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 34
Classe Mapper
• On déclare une classe Mapper par exemple ainsi (ici pour l’exemple du compteur
d'occurences de mots):
• C'est la méthode map qu'on doit implémenter. Elle est appelée pour chaque couple
(clef;valeur) d’entrée: respectivement les arguments key et value.
• L'entrée ainsi que la sortie du Mapper est une paire clé/valeur.
• Le troisième argument, context, permet entre autres de renvoyer un couple
(clef;valeur) en sortie de la méthode map. Il faut évidemment que la clef et la valeur
renvoyées ainsi correspondent aux types keyout et valueout de la classe Mapper.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 35
Classe Mapper
• Input:
• La clé n'est rien d'autre que le décalage de chaque ligne du fichier texte: LongWritable
• La valeur est chaque ligne individuelle: Texte
• Output:
• La clé est les mots symbolisés (« tokenized »): Texte
• La valeur codée en dur dans notre cas qui est 1: IntWritable
• Ce code java permet de symboliser chaque mot et de leur attribuer une valeur codée en dur égale
à 1.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 36
Classe Reducer
• Similaire à la classe Mapper, elle implémente la méthode
reduce du programme map/reduce.
• Elle doit étendre la classe Hadoop
[Link]. Il s'agit là aussi
d'une classe générique qui se paramétrise avec les mêmes
quatre types que pour la classe Mapper: keyin, valuein,
keyout et valueout.
• A noter que contrairement à la classe Mapper, la classe
Reducer recevra ses arguments sous la forme d'une clef
unique et d'une liste de valeurs correspondant à cette clef.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 37
Classe Reducer
• On déclare une classe Reducer par exemple ainsi:
• C'est la méthode reduce qu'on doit implémenter.
• La fonction est appelée une fois par clef distincte. C'est l'argument key qui contient la clef
distincte, et l'argument Iterable Java values qui contient la liste des valeurs correspondant à
cette clef.
• Là aussi, on peut renvoyer un couple (clef;valeur) en sortie de l'opération reduce par le
biais de la méthode write de l’argument context
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 38
Classe Reducer
• Input:
• La clé représente les mots uniques qui ont été générés après la phase de tri et de mélange: Texte
• La valeur est une liste d'entiers correspondant à chaque clé: IntWritable
• Output:
• La clé est tous les mots uniques présents dans le fichier texte d'entrée: Texte
• La valeur est le nombre d'occurrences de chacun des mots uniques: IntWritable
• On a agrégé les valeurs présentes dans chacune des listes correspondant à chaque clé et produit le
résultat final.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 39
Types de données
MapReduce
• Les types Text, IntWritable. . . sont des implémentations d’une
interface appelée Writable. Cette interface comprend :
• un constructeur. On peut mettre la valeur initiale en paramètre.
• IntWritable val = new IntWritable(34);
• un modificateur : void set(nouvelle valeur);
• [Link](35);
• un accesseur : type get()
• int v = [Link]();
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 40
Interface Writable
• Elle permet la sérialisation, c’est à dire l’écriture d’une structure de
données sous forme d’octets et l’opération inverse, la
désérialisation qui permet de reconstruire une structure de données
à partir d’octets.
• La sérialisation est nécessaire pour échanger des données entre
machines. Cela fait partie de la technique appelée Remote Procedure
Call (RPC). On ne peut pas simplement échanger les octets internes
car les machines du cluster ne sont pas obligatoirement toutes
pareilles : nombre d’octets, ordre des octets. . .
• Cette interface n’est pas limitée à des types simples mais peut gérer
des collections (tableaux, listes, dictionnaires. . . ) et classes.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 41
Classe Text
• La classe Text permet de représenter n’importe quelle
chaîne. Elle possède quelques méthodes à connaître :
• String toString() extrait la chaîne Java
• int getLength() retourne la longueur de la chaîne
• int charAt(int position) retourne le code UTF8 (appelé
point) du caractère présent à cette position
• Ces méthodes ne sont pas suffisantes. Il faudra souvent
convertir les Text en chaînes.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 42
Approfondissement sur
MapReduce
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 43
Création Job MapReduce
• Revenons sur le lancement d’un job MapReduce :
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 44
Autre format
• Il existe d’autres formats d’entrée, comme KeyValueTextInputFormat qui est
capable de lire des fichiers déjà au format (clé, valeur) :
• les lignes se finissent par un '\n' ou un '\r' (cause sûrement un pb avec des
fichiers Windows qui ont les deux à la fois)
• chaque ligne est un couple (clé, valeur)
• c’est une tabulation '\t' qui sépare la clé de la valeur
• ces deux informations sont des Text
• [Link]([Link]);
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 45
Format de données
intermédiaires
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 46
Format de données de sortie
• Voici les instructions qui spécifient le format du fichier de
sortie :
• Ce doivent être les types de sortie du Reducer :
• La classe TextOutputFormat<K,V> est paramétrée par les
types des clés et des valeurs. Par défaut, ce sont tous deux
des Text.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 47
Fichiers de sortie
• Les résultats du job sont enregistrés dans des fichiers situés
dans le dossier indiqué par :
• [Link](job, new
Path("DOSSIER"));
• YARN enregistre un fichier par Reducteur final. Leurs noms
sont part-r-00000, part-r-00001,. . .
• La classe Path possède plusieurs constructeurs qui permettent
de concaténer des chemins :
• Path sortie1 = new Path("/tmp", "MonAppli", "etape1");
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 48
Types des clés et valeurs
• Le type ArrayWritable représente des tableaux de
Writable quelconques. Il est préférable de la sous-classer
pour qu’elle contienne les données voulues :
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 49
Combiner
• Pour l’instant, nous avons vu deux sortes de tâches : map et
reduce. Nous avons vu que les paires (clé,valeur) produites par
les tâches map sont envoyées par une étape appelée shuffle and
sort à travers le réseau vers les tâches Reduce de manière à
regrouper toutes les clés identiques sur la même machine.
• Quand on traite des données volumineuses, ça peut devenir
trop lent. Hadoop propose un troisième intervenant, entre map
et reduce qui effectue un traitement local des paires produites
par map.
• C’est le « Combiner ». Son travail est de faire une première
étape de réduction de tout ce qui est produit sur une machine.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 50
Combiner
• Le combiner traite des paires ayant la même clé sur la
même machine que les tâches Map. Les paires qu’il émet
sont envoyées aux reducers.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 51
Combiner
• Le combiner permet de gagner du temps, non seulement en regroupant
les valeurs présentes sur la même machine, mais en faisant un petit calcul
au passage.
• Par exemple, pour calculer la plus grande valeur d’un ensemble de
données, il peut calculer le maximum de ce qu’il reçoit localement, et au
lieu de produire une liste de valeurs à destination des réducteurs, il n’en
produit qu’une seule.
• De fait, dans certains cas, le combiner est identique au reducer. On peut
utiliser la même classe pour les deux.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 52
Différences entre un
Combiner et un Reducer
• 1. Les paramètres d’entrée et de sortie du Combiner doivent être
identiques à ceux de sortie du Mapper, tandis que les types des paramètres
de sortie du Reducer peuvent être différents de ceux de son entrée.
• 2. On ne peut pas employer un Combiner quand la fonction n’est pas
commutative et associative (ex. moyenne).
• 3. Les Combiners reçoivent leurs paires d’un seul Mapper, tandis que les
Reducers reçoivent les paires de tous les Combiners et/ou tous les
Mappers. Les Combiners ont une vue restreinte des données.
• 4. Hadoop n’est pas du tout obligé de lancer un Combiner, c’est seulement
une optimisation locale. Il ne faut donc pas concevoir un algorithme «
map-combine-reduce » dans lequel le Combiner jouerait un rôle
spécifique.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 53
Combiner
• Les combiners reprennent la même interface que les
reducers sauf que les paires de sortie doivent être du
même type que les paires d’entrée :
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 54
Chapitre 2: Pig & Hive
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 55
Datawarehouse/MapReduce
• Datawarehouse est souvent pas assez scalable
• Coût prohibitif à l'échelle du Web: Jusqu’à 200 000 $ / To
• Basé sur SQL (Peu de contrôle sur la méthode d’exécution,
L'optimisation des requêtes est difficile, Peu ou pas de statistiques…)
• MapReduce permet la scalablilité grâce à sa conception simple
• Il est basé sur des opérations parallélisables
• Pas de transaction (comme SQL)
• Fonctionne sur du matériel bon marché
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 56
Inconvénients MapReduce
• Flux de données extrêmement rigide
• Les opérations courantes doivent être codées à la main
• Joindre, filtrer, projection, agrégats, tri, distinct
• La sémantique cachée dans les fonctions map-Reduce
• Difficile à maintenir, à étendre et à optimiser
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 57
Inconvénients MapReduce
• Hadoop est idéal pour le traitement de données en masse:
• Mais écrire des programmes Java est lent et laborieux
• Nécessité un background en programmation
• Solution:
• Développer des solutions de gestion des données
• Développer des langages de traitement de données de
niveau supérieur
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 58
Pig & Hive
• Pig: système de traitement de données à grande échelle
• Les scripts sont écrits en Pig Latin, un langage de flux de données
• Développé par Yahoo !, maintenant open source
• Hive: application data warehouse dans Hadoop
• Le langage de requête est HQL, variante de SQL
• Tables stockées sur HDFS sous forme de fichiers plats
• Développé par Facebook, maintenant open source
• Objectif:
• Fournir un langage de niveau supérieur pour faciliter le traitement des données volumineuses
• Rendre Hadoop accessible à des non-informaticiens scientifiques : physiciens, statisticiens, mathématiciens
• Le langage de niveau supérieur se «compile» en des jobs Hadoop
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 59
Pig
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 60
Pig: Présentation
• Apache Pig est un logiciel initialement créé par Yahoo!
• Yahoo! estime que 50% de leur Hadoop workload sur leurs clusters
de 100 000 CPUs sont générés par des scripts Pig
• Pig est un langage de programmation de requêtes sur des fichiers HDFS
• Plus simple que Java pour écrire des jobs MapReduce
• Langage interprété: les scripts sont traduits en des Jobs
MapReduce
• Pig sert à lancer les programmes Pig Latin dans l’environnement
Hadoop
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 61
Pig
• Pig propose un langage de scripts appelé « Pig Latin »
• C’est un langage « Data Flow Language »
• Ses instructions décrivent des traitements sur un flot de données
• Conceptuellement, ça ressemble à un tube Unix chaque commande
modifie le flot de données qui la traverse
• Pig Latin permet également de construire des traitements beaucoup
plus variés et non-linéaires
• Pig traduit les programmes Pig Latin en jobs MapReduce et intègre
les résultats dans le flot
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 62
Exemple de programme Pig
• Ce programme affiche les 10 adultes les plus jeunes
extraits d’un fichier csv contenant 3 colonnes :
identifiant, nom et age.
• Pour l’exécuter : pig [Link]. Ça lance un job
MapReduce dans Hadoop. On peut aussi taper les
instructions une par une dans le shell de Pig.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 63
Le Langage Pig Latin
• Structure d’un programme
• Un programme Pig Latin est une succession d’instructions. Toutes doivent être
terminées par un ;
• Comme dans SQL, il n’y a pas de notion de variables, ni de fonctions/
procédures.
• Le résultat de chaque instruction Pig est une collection de n-uplets. On l’appelle
relation. On peut la voir comme une table de base de données.
• Chaque instruction Pig prend une relation en entrée et produit une nouvelle
relation en sortie.
• sortie = INSTRUCTION entree PARAMETRES …;
• Les commentaires sont placés entre /*...*/ ou à partir de -- et la fin de ligne.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 64
Le Langage Pig Latin
• Exécution d’un programme
• Lorsque vous lancez l’exécution d’un programme, Pig
commence par l’analyser.
• Chaque instruction, si elle est syntaxiquement correcte, est
rajoutée à une sorte de plan d’action, une succession de
MapReduce, et c’est seulement à la fin du programme que ce
plan d’action est exécuté en fonction de ce que vous
demandez à la fin.
• L’instruction EXPLAIN relation affiche le plan d’action
prévu pour calculer la relation.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 65
Le Langage Pig Latin
• Relations et Alias
• La syntaxe nom = INSTRUCTION ... ; définit un alias, c’est à dire un
nom pour la relation créée par l’instruction. Ce nom étant
généralement employé dans les instructions suivantes, c’est ça qui
construit un flot de traitement.
• Le même alias peut être réutilisé dans des instructions différentes, ce
qui crée des bifurcations dans le flot de traitement : séparations ou
regroupements. Il n’est pas recommandé de réaffecter le même alias.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 66
Le Langage Pig Latin
• Pig permet soit d’enchaîner les instructions par le
mécanisme des alias, soit par un appel imbriqué:
• Toutefois, les appels imbriqués ne permettent pas de faire
facilement des séparations de traitement, au contraire des
alias :
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 67
Le Langage Pig Latin
• Relations et Types
• Une relation est une collection ordonnée de n-uplets qui possèdent tous les mêmes
champs. Voici les types possibles:
• Les types scalaires sont :
• int et long pour les entiers, float et double pour les réels
• chararray pour des chaînes quelconques.
• bytearray pour des objets binaires quelconques
• Il y a aussi trois types complexes :
• dictionnaires (maps) : [nom#mickey, age#87]
• n-uplets (tuples) de taille fixe : (mickey, 87, hergé)
• sacs (bags) = ensembles sans ordre de tuples : {(mickey, 87), (asterix, 56), (tintin, 86)}
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 68
Le Langage Pig Latin
• Schéma d’une relation
• La liste des champs d’une relation est appelé schéma.
C’est un n-uplet. On l’écrit (nom1:type1, nom2:type2, ...)
• Par exemple, une relation contenant des employés aura le
schéma suivant :
• L’instruction LOAD '[Link]' AS schéma; permet de lire un
fichier CSV et d’en faire une relation d’après le schéma indiqué.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 69
Le Langage Pig Latin
• Schéma complexe (tuples)
• Pig permet la création d’une relation basée sur un
schéma incluant des données complexes. Soit un
fichier contenant des segments 3D :
• Voici comment lire ce fichier :
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 70
Le Langage Pig Latin
• Schéma complexe (bags)
• Pig permet de lire des sacs, c’est à dire des ensembles de
données de mêmes types mais en nombre quelconque :
• Le schéma de ce fichier est :
• (nom:chararray, Points:{tuple(x:int, y:int, z:int)})
• Le deuxième champ du schéma est spécifié ainsi : « nom du
champ »:{« type du contenu du sac »}. Les données de ce champ
doivent être au format {« liste de valeurs correspondant au type »}
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 71
Le Langage Pig Latin
• Schéma complexe (maps)
• Pig permet de lire les dictionnaires, voici un
exemple de fichier « [Link] » :
• La lecture du fichier est effectuée ainsi:
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 72
Le Langage Pig Latin
• Nommage des champs
• Il y a deux syntaxes pour nommer les champs d’une relation. Soit on emploie leur nom
en clair, soit on les désigne par leur position $0 désignant le premier champ, $1 le
deuxième et ainsi de suite.
• On emploie la seconde syntaxe quand les noms des champs ne sont pas connus ou
qu’ils ont été générés dynamiquement.
• Quand il y a ambiguïté sur la relation concernée, on préfixe le nom du champ par le nom
de la relation : [Link]
• Lorsqu’un champ est un tuple, ses éléments sont nommés [Link]. Par
exemple segments.P1.z1
• Pour un champ de type map, ses éléments sont nommés [Link]#element. Par
exemple [Link]#metier
• Il n’y a pas de syntaxe pour l’accès aux champs de type bag.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 73
Instructions Pig
• Il y a plusieurs catégories d’instructions : interaction avec les fichiers,
filtrage, jointures. . .
• Il y a également des instructions d’accès aux fichiers HDFS à
l’intérieur de Pig.
• Ces commandes fonctionnent comme dans Unix et elles sont plutôt
destinées à être tapées dans le shell de Pig.
• dossiers : cd, ls, mkdir, rmf (rmf = rm -f -r)
• fichiers : cat, cp, copyFromLocal, copyToLocal, mv, rm
• divers : help, quit, clear
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 74
Instructions Pig
• Chargement et enregistrement de fichiers
• LOAD 'fichier' USING PigStorage('sep') AS schema;
• Charge le fichier qui doit être au format CSV avec des champs séparés par sep et en leur
attribuant les noms et types du schéma. Des données qui ne correspondent pas restent vides.
• Il n’est pas nécessaire de mettre la clause USING quand le séparateur est la tabulation.
• NB: le fichier doit être présent dans HDFS ; rien ne signale l’erreur autrement que
l’échec du programme entier.
• STORE relation INTO 'fichier' USING PigStorage('sep');
• Enregistre la relation dans le fichier, sous forme d’un fichier CSV séparé par sep, ex: ‘;', ':'. . .
• Dans les deux cas, si le fichier porte une extension .gz, .bz2, il est (dé)compressé
automatiquement
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 75
Instructions Pig
• Affichage de relations
• DUMP relation;
• Lance le calcul MapReduce de la relation et affiche les résultats à l’écran.
C’est seulement à ce stade que la relation est calculée.
• SAMPLE relation;
• Affiche quelques n-uplets choisis au hasard, une sorte d’échantillon de la
relation.
• DESCRIBE relation;
• Affiche le schéma, c’est à dire les champs, noms et types, de la relation.
C’est à utiliser dès qu’on a un doute sur le programme.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 76
Instructions Pig
• Instruction ORDER
• Elle classe les n-uplets dans l’ordre croissant (ou décroissant si
DESC) des champs indiqués
• ORDER relation BY champ [ASC|DESC], ...
• Ça ressemble totalement à ce qu’on fait avec SQL.
• RANK relation BY champ [ASC|DESC], ...
• Retourne une relation ayant un premier champ supplémentaire,
le rang des n-uplets par rapport au critère indiqué.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 77
Instructions Pig
• Instruction LIMIT
• On l’utilise en général avec ORDER. Par exemple, cette
instruction affiche les 10 plus gros achats :
• triparmontant = ORDER achats BY montant DESC;
• meilleurs = LIMIT triparmontant 10;
• DUMP meilleurs;
• On peut aussi l’écrire de manière imbriquée :
• DUMP LIMIT (ORDER achats BY montant DESC) 10;
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 78
Instructions Pig
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 79
Instructions Pig
• Instruction DISTINCT
• Elle sert à supprimer les n-uplets en double.
• DISTINCT relation;
• La totalité des champs des tuples sont pris en compte pour
éliminer les doublons.
• Si on veut éliminer les doublons en se basant sur une partie
des champs, alors il faut utiliser FOREACH
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 80
Instructions Pig
• Instruction FOREACH GENERATE
• C’est une instruction qui peut être très complexe. Dans sa forme la plus simple,
elle sert à générer une relation à partir d’une autre, par exemple faire une
projection.
• FOREACH relation GENERATE expr1 AS champ1, ...;
• Crée une nouvelle relation contenant les champs indiqués. Ça peut être des
champs de la relation fournie ou des valeurs calculées ; la clause AS permet de
leur donner un nom.
• Exemple, on génère des bons d’achats égaux à 5% du total des achats des clients :
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 81
Instructions Pig
• Énumération de champs
• Lorsqu’il y a de nombreux champs dans la relation d’entrée et aussi dans
celle qu’il faut générer, il serait pénible de tous les écrire. Pig propose une
notation champA .. champB pour énumérer tous les champs compris entre
les deux.
• Si champA est omis, alors ça part du premier ; si champB est omis, alors
l’énumération va jusqu’au dernier champ.
• Par exemple, une relation comprend 20 champs, on veut seulement retirer le
8e :
• Attention, il faut écrire deux points bien espacés.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 82
Instructions Pig
• Instruction GROUP BY
• L’instruction GROUP relation BY champ rassemble tous les tuples de la relation qui ont la
même valeur pour le champ.
• Elle construit une nouvelle relation contenant des couples (champ, {tuples pour lesquels
champ est le même}).
• Soit une relation appelée achats (idachat, idclient, montant) :
• GROUP achats BY idclient produit ceci :
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 83
Instructions Pig
• Instruction GROUP BY
• L’instruction GROUP BY crée une nouvelle relation composée de couples
dont les champs sont nommés :
• group : c’est le nom donné au champ qui a servi à construire les
groupements, on ne peut pas changer le nom
• relation : le nom de la relation groupée est donnée au bag. Il contient
tous les n-uplets dont le champ BY a la même valeur.
• Donc si on fait
• achatsparclient = GROUP achats BY idclient;
• on devra mentionner [Link] et [Link]
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 84
Instructions Pig
• Instruction GROUP ALL
• L’instruction GROUP relation ALL regroupe tous les n-uplets de
la relation dans un seul n-uplet
• composé d’un champ appelé group et valant all, et d’un second
champ appelé comme la relation à grouper.
• montants = FOREACH achats GENERATE montant;
• montants_tous = GROUP montants ALL;
• Crée ce seul n-uplet : (all, {(12.50),(21.75),(56.25),(34.00),
(3.30)})
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 85
Instructions Pig
• Utilisation de GROUP BY et FOREACH
• On utilise en général FOREACH pour traiter le résultat d’un GROUP. Ce
sont des couples (rappel) :
• Le premier champ venant du GROUP BY s’appelle group,
• Le second champ est un sac (bag) contenant tous les n-uplets liés à
group. Ce sac porte le nom de la relation qui a servi à le créer.
• On utilise FOREACH pour agréger le sac en une seule valeur, par exemple
la somme de l’un des champs.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 86
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 87
Instructions Pig
• Opérateurs
• Pig propose plusieurs opérateurs permettant d’agréger les valeurs d’un sac. Le sac est construit par un
GROUP BY ou GROUP ALL.
• • SUM,AVG calcule la somme/moyenne des valeurs numériques.
• • MAX,MIN retournent la plus grande/petite valeur
• • COUNT calcule le nombre d’éléments du sac sans les null
• • COUNT_STAR calcule le nombre d’éléments avec les null
• Il y a d’autres opérateurs :
• • CONCAT(v1, v2, ...) concatène les valeurs fournies.
• • DIFF(sac1, sac2) compare les deux sacs et retourne un sac contenant les éléments qui ne sont
pas en commun.
• • SIZE retourne le nombre d’éléments du champ fourni.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 88
Instructions Pig
• Instruction Join
• Les jointures permettent, comme en SQL de créer une troisième
table à partir de plusieurs tables qui ont un champ en commun.
• JOIN relation1 BY champ1a, relation2 BY champ2b, ...
• Cela crée une relation ayant autant de champs que toutes les
relations mentionnées. Les n-uplets qu’on y trouve sont ceux du
produit cartésien entre toutes ces relations, pour lesquels le
champ1a de la relation1 est égal au champ2b de la relation2.
• Dans la nouvelle relation, les champs sont nommés
relation1::champ1a, relation1::champ1b, . . .
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 89
Instructions Pig
• Instruction Join: Exemple
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 90
Instructions Pig
• Instruction Union
• Cette instruction regroupe les n-uplets des relations
indiquées.
• UNION ONSCHEMA relation1, relation2, ...
• Il est très préférable que les relations aient les mêmes
schémas.
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 91
Comparaison Pig et SQL
• Il y a quelques ressemblances apparentes entre SQL et
Pig Latin. Il y a plusieurs mots clés en commun (JOIN,
ORDER, LIMIT. . . ) mais leur principe est différent.
• Soit une petite base de données de clients et d’achats. La
voici en SQL ; en Pig, ça sera deux fichiers CSV
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 92
Comparaison Pig et SQL
• Pour calculer le montant total des achats par client:
Issat Gafsa 2022/2023 Dr. Fatma Hrizi 93