0% ont trouvé ce document utile (0 vote)
260 vues93 pages

Cours Pig

Transféré par

Oussama Panorama
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
260 vues93 pages

Cours Pig

Transféré par

Oussama Panorama
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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

Vous aimerez peut-être aussi