Introduction à Apache Pig

Qu’est ce que Apache Pig?

Pig est une plateforme haut niveau pour la création de programme MapReduce utilisé avec Hadoop. Apache Pig intègre un langage propre à lui. Le Pig Latin. Pig Latin est un langage script de type ‘data flow‘.  C’est un langage de programmation de requêtes sur des fichiers HDFS qui se veut plus simple que Java pour écrire des jobs MapReduce. La logique de Pig Latin est similaire à celle du langage SQL pour systèmes SGBDR. Les fonctionnalités de Pig (par conséquent Pig Latin) peuvent être étendu en utilisant les Fonctions Définies par l’Utilisateur ou UDF (User Defined Functions). Il s’agit de fonctions que l’utilisateur peut écrire en Java, en Python,en JavaScript, en Ruby ou en Groovy pour ensuite être utilisées directement au sein du langage.

 

Architecture Apache Pig

 

Apache Pig a été initialement créé par Yahoo! avec l’objectif de rendre Hadoop accessible à des non-informaticiens scientifiques : physiciens, statisticiens, mathématiciens. . .

Le modèle de données de Pig Latin?

Le modèle de données de Pig est simple. Un script Pig Latin travaille sur des données élémentaires nommées ‘Atom‘. Un Atom représente un type élémentaire tel que int, long, double, chararray, etc. 

Un ensemble d’Atoms, par exemple une ligne dans un fichier, s’appelle un ‘Tuple‘. Les Tuples sont regroupés dans des ‘Bags‘ appelés aussi ‘Pig Relations‘.

Aussi, Pig Latin propose une représentation de données sous la forme ‘Clé, Valeur‘. Ce type est connu sous le nom ‘Map‘.

 

Modèle de données Pig Latin

 

Modèle de données Pig Latin

 

 

Déroulement d’un script Pig

Un programme Pig commence souvent à charger des ensembles de données dans des bags, puis de manipuler ces bags par le biais d’opérations de tri, de filtrage, de jointure… puis stocker les résultats dans de nouveaux bags .

Une “opération” Pig définit un opérateur qui prend une relation en entrée et produit une autre relation en sortie. Les opérations consistent en une séquence d’instructions suivant généralement le schéma suivant :

  1. L’instruction LOAD charge les données d’un fichier (généralement stocké sur HDFS) sous la forme d’une relation (liste de n-tuples).
  2. Une série de transformations traite les données.
  3. Une instruction qui déclenche le traitement. Exemple STORE ou DUMP.

 

  • L’instruction STORE écrit le résultat dans le système de fichiers (généralement HDFS) ;
  • L’instruction DUMP affiche le résultat à l’écran.

 

Principaux opérateurs Pig

 

Operator Description
foreach Applique une expression à chaque document
filter  Filtre les tuples sur certains critères
distinct Elimination des doublons
join Jointures de deux bags
group Regroupement
cogroup Association de n-uplets provenant de deux sources
cross Produit cartésien de deux sources
order Tri
limit Limite la taille des données traitées
union Union de deux sources (dont les schémas peuvent être très différents)
split Partition d’une relation selon certains critères

 

Exemple d’un script Pig

Dans l’exemple qui suit, on souhaite connaître les 5 pages les plus visitées par les utilisateurs entre 18 et ans. Pour cela on dispose de deux fichiers en entrée, Users et Pages.

Le script suivant exécute les tâches suivantes :

  • On commence par charger deux fichiers : Users et Pages.
  • Pour chacun des fichiers on définit un schéma de lecture.
  • Les données sont stockées dans deux relations Pig.
  • On applique un filtre sur les données Users puis on fait une jointure avec les données des Pages.
  • On groupe les pages par URL puis on effectue le compte des clicks.
  • Le compte des clicks est trié par ordre décroissant.
  • On limite le résultat au cinq première lignes.
  • Le résultat final est stocké dans le répertoire de sortie.