Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
fvrier-mars 2016
Abstract
Il sagit des transparents du cours mis sous une forme plus facilement imprimable et lisible.
Ces documents ne sont pas totalement libres de droits. Ce sont des supports de cours
mis votre disposition pour vos tudes sous la licence Creative Commons Attribution - Pas
dUtilisation Commerciale - Partage dans les Mmes Conditions 4.0 International.
1 Principes du Map-Reduce 11
1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.1.1 Pourquoi ce cours ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.1.2 Prfixes multiplicatifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.1.3 Mgadonnes ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.1.4 Prsentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.1.5 Hadoop ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.1.6 Un Data Center . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.1.7 Serveur lame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.2 Hadoop File System (HDFS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.2.1 Prsentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.2.2 Organisation des fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.2.3 Commande hdfs dfs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.2.4 changes entre HDFS et le monde . . . . . . . . . . . . . . . . . . . . . . . . 15
1.2.5 Comment fonctionne HDFS ? . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
2
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
1.5.1 Prsentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.5.2 Squelette de Mapper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.5.3 Explications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.5.4 Types de donnes MapReduce . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.5.5 Interface Writable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.5.6 Classe Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.5.7 Squelette de Reducer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.5.8 Explications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.5.9 Squelette de Traitement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.5.10 Squelette de Traitement (cur) . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.5.11 Explications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.5.12 Compilation et lancement dun traitement . . . . . . . . . . . . . . . . . . . 28
3
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
4
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
5
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
4 Pig 58
4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.1.1 Prsentation de Pig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.1.2 Exemple de programme Pig . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.1.3 Comparaison entre SQL et Pig Latin . . . . . . . . . . . . . . . . . . . . . . 58
4.2 Langage Pig Latin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.2.1 Structure dun programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.2.2 Excution dun programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.2.3 Relations et alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.2.4 Enchanement des instructions . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.2.5 Relations et types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.2.6 Schma dune relation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.2.7 Schmas complexes (tuples) . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.2.8 Schmas complexes (bags) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.2.9 Schmas complexes (maps) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.2.10 Nommage des champs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.3 Instructions Pig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.3.2 Chargement et enregistrement de fichiers . . . . . . . . . . . . . . . . . . . . 62
4.3.3 Affichage de relations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.3.4 Instruction ORDER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.3.5 Instruction LIMIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.3.6 Instruction FILTER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.3.7 Instruction DISTINCT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.3.8 Instruction FOREACH GENERATE . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.3.9 numration de champs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.3.10 Instruction GROUP BY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.3.11 Remarque sur GROUP BY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.3.12 Instruction GROUP ALL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.3.13 Utilisation de GROUP BY et FOREACH . . . . . . . . . . . . . . . . . . . . . . . 66
4.3.14 Oprateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
4.3.15 Utilisation de GROUP et FOREACH . . . . . . . . . . . . . . . . . . . . . . . . . 66
4.3.16 Instruction FOREACH GENERATE complexe . . . . . . . . . . . . . . . . . . . . 67
4.3.17 Instruction FOREACH GENERATE complexe (suite) . . . . . . . . . . . . . . . . 67
6
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
5 Spark 70
5.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.1.1 Prsentation de Spark . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.1.2 Intrts de Spark . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.1.3 Premier exemple Spark . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.1.4 Principe du traitement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
5.1.5 Programme pySpark . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
5.1.6 Remarques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
5.1.7 Lancement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
5.1.8 Commentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
5.1.9 Fonction lambda ou fonction nomme ? . . . . . . . . . . . . . . . . . . . . . 72
5.1.10 Fonction lambda ou fonction nomme ? . . . . . . . . . . . . . . . . . . . . . 73
5.1.11 Fonction lambda ou fonction nomme ? . . . . . . . . . . . . . . . . . . . . . 73
5.1.12 Dernire remarque sur les fonctions . . . . . . . . . . . . . . . . . . . . . . . 73
5.2 lments de lAPI Spark . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.2.1 Principes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.2.2 Dbut dun programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.2.3 RDD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.2.4 RDD (suite) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.2.5 Lire et crire des SequenceFile . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.2.6 Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.2.7 Transformations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
5.2.8 Transformations de type map . . . . . . . . . . . . . . . . . . . . . . . . . . 76
5.2.9 Transformations de type map (suite) . . . . . . . . . . . . . . . . . . . . . . 76
5.2.10 Transformations ensemblistes . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
7
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
6 SparkSQL 79
6.1 SparkSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
6.1.1 Prsentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
6.1.2 Dbut dun programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
6.1.3 Crer un DataFrame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
6.1.4 Crer un DataFrame partir dun fichier JSON . . . . . . . . . . . . . . . . 80
6.1.5 Crer un DataFrame partir dun RDD . . . . . . . . . . . . . . . . . . . . . 80
6.1.6 Extraction dinformations dun DataFrame . . . . . . . . . . . . . . . . . . . 80
6.1.7 Donner un nom de table SQL un DataFrame . . . . . . . . . . . . . . . . . 81
6.1.8 Exemple de requte SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
6.2 API SparkSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
6.2.1 Aperu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
6.2.2 Exemple de requte par lAPI . . . . . . . . . . . . . . . . . . . . . . . . . . 82
6.2.3 Classe DataFrame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
6.2.4 Mthodes de DataFrame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
6.2.5 Agrgation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
6.2.6 Classement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
7 HBase 84
7.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
7.1.1 Prsentation de HBase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
7.1.2 Structure interne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
7.1.3 Tables et rgions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
7.1.4 Diffrences entre HBase et SQL . . . . . . . . . . . . . . . . . . . . . . . . . 85
7.1.5 Structure des donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
7.1.6 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
7.1.7 Nature des cls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
7.1.8 Ordre des cls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
7.1.9 Choix des cls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
7.1.10 viter le hotspotting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
8
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
8 Hive et Cassandra 97
8.1 Hive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
8.1.1 Prsentation rapide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
8.1.2 Dfinition dun schma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
9
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
10
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
Semaine 1
Principes du Map-Reduce
1.1. Introduction
1.1.1. Pourquoi ce cours ?
Selon LinkedIn, les comptences les plus recherches en 2016 dans le monde sont :
1) Cloud and Distributed Computing (Hadoop, Big Data)
2) Statistical Analysis and Data Mining (R, Data Analysis)
10) Storage Systems and Management (SQL)
Voir ces transparents pour la liste en France, qui est trs similaire et inclut la connaissance de Python
en 13e position.
11
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
1.1.3. Mgadonnes ?
Les mgadonnes ou Big Data sont des collections dinformations qui auraient t considres comme
gigantesques, impossible stocker et traiter, il y a une dizaine dannes.
Internet : Google en 2015 : 10 Eo (10 milliards de Go), Facebook en 2014 : 300 Po de donnes
(300 millions de Go), 4 Po de nouvelles donnes par jour, Amazon : 1 Eo.
BigScience : tlescopes (1 Po/jour), CERN (500 To/jour, 140 Po de stockage), gnome,
environnement. . .
Les informations sont trs difficiles trouver.
La raison est que tout est enregistr sans discernement, dans lide que a pourra tre exploit. Certains
prchent pour que les donnes collectes soient pertinentes (smart data) plutt que volumineuses.
1.1.4. Prsentation
Le traitement daussi grandes quantits de donnes impose des mthodes particulires. Un SGBD
classique, mme haut de gamme, est dans lincapacit de traiter autant dinformations.
Rpartir les donnes sur plusieurs machines (jusqu plusieurs millions dordinateurs)
systme de fichiers spcial permettant de ne voir quun seul espace pouvant contenir des
fichiers gigantesques et/ou trs nombreux (HDFS),
bases de donnes spcifiques (HBase).
Traitements du type map-reduce :
algorithmes faciles crire,
excutions faciles parallliser.
1.1.5. Hadoop ?
12
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
13
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
Il semble que Google utilise des ordinateurs assez basiques, peu chers mais extrmement nombreux
(106 ), consulter wikipedia.
14
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
Les datanodes contiennent des blocs, le namenode sait o sont les fichiers : quels blocs et quels
datanodes.
Consulter cette page pour des explications compltes.
15
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
1.2.8. Explications
Les datanodes contiennent des blocs (nots A,B,C. . . ). Les mmes blocs sont dupliqus (replication)
sur diffrents datanodes, en gnral 3 fois. Cela assure :
fiabilit des donnes en cas de panne dun datanode,
accs parallle par diffrents processus aux mmes donnes.
Le namenode sait la fois :
sur quels blocs sont contenus les fichiers,
sur quels datanodes se trouvent les blocs voulus.
On appelle cela les metadata.
Inconvnient majeur : panne du namenode = mort de HDFS, cest pour viter a quil y a le secondary
namenode. Il archive les metadata, par exemple toutes les heures.
16
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
Ces deux classes ont besoin de connatre la configuration du cluster HDFS, laide de la classe
Configuration. Dautre part, les noms complets des fichiers sont reprsents par la classe Path
1.2.11. Exemple
Voici quelques manipulations sur un fichier :
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.Path;
import ...;
import java.io.*;
import ...;
public class HDFSread {
17
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
HDFSread: HDFSread.jar
hadoop jar HDFSread.jar
HDFSinfo: HDFSinfo.jar
hadoop jar HDFSinfo.jar
18
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
1.3.2. Exemple
Soient les 4 n-uplets fictifs suivants :
Calculer le prix maximal, moyen ou total peut scrire laide dalgorithmes, tudis en premire
anne, du type :
19
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
Pour lefficacit, les valeurs intermdiaires ne sont pas stockes mais transmises entre les deux fonctions
par une sorte de tube (comme dans Unix). Le programme ne scrit donc pas tout fait comme a.
data = [
{'id':1, 'marque':'Renault', 'modele':'Clio', 'prix':4200},
{'id':2, 'marque':'Fiat', 'modele':'500', 'prix':8840},
{'id':3, 'marque':'Peugeot', 'modele':'206', 'prix':4300},
{'id':4, 'marque':'Peugeot', 'modele':'306', 'prix':6140} ]
1.3.5. Explications
Lcriture map(fonction, liste) applique la fonction chaque lment de la liste. Elle effectue
la boucle pour de lalgorithme prcdent et retourne la liste des prix des voitures. Ce
rsultat contient autant de valeurs que dans la liste dentre.
La fonction reduce(fonction, liste) agglomre les valeurs de la liste par la fonction et
retourne le rsultat final1 .
Ces deux fonctions constituent un couple map-reduce et le but de ce cours est dapprendre les
comprendre et les programmer.
Le point cl est la possibilit de parallliser ces fonctions afin de calculer beaucoup plus vite sur une
machine ayant plusieurs curs ou sur un ensemble de machines relies entre elles.
20
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
Remarque : il faut que la fonction mappe soit une pure fonction de son paramtre, quelle nait pas
deffet de bord tels que modifier une variable globale ou mmoriser ses valeurs prcdentes.
1.3.8. Un schma
21
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
1.4.4. Map
La fonction Map reoit une paire en entre et peut produire un nombre quelconque de paires en
sortie : aucune, une ou plusieurs, volont. Les types des entres et des sorties sont comme on veut.
Cette spcification trs peu contrainte permet de nombreuses choses. En gnral, les paires que reoit
Map sont constitues ainsi :
la valeur de type text est lune des lignes ou lun des n-uplets du fichier traiter
la cl de type integer est la position de cette ligne dans le fichier (on lappelle offset en bon
franais)
Il faut comprendre que YARN lance une instance de Map pour chaque ligne de chaque fichier des
donnes traiter. Chaque instance traite la ligne quon lui a attribue et produit des paires en sortie.
Les tches MAP traitent chacune une paire et produisent 0..n paires. Il se peut que les mmes cls
et/ou valeurs soient produites.
22
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
1.4.6. Reduce
La fonction Reduce reoit une liste de paires en entre. Ce sont les paires produites par les instances
de Map. Reduce peut produire un nombre quelconque de paires en sortie, mais la plupart du temps,
cest une seule. Par contre, le point crucial, cest que les paires dentre traites par une instance de
Reduce ont toutes la mme cl.
YARN lance une instance de Reduce pour chaque cl diffrente que les instances de Map ont produit,
et leur fournit uniquement les paires ayant la mme cl. Cest ce qui permet dagrger les valeurs.
En gnral, Reduce doit faire un traitement sur les valeurs, comme additionner toutes les valeurs
entre elles, ou dterminer la plus grande des valeurs. . .
Quand on conoit un traitement MapReduce, on doit rflchir aux cls et valeurs ncessaires pour
que a marche.
Les tches Reduce reoivent une liste de paires ayant toutes la mme cl et produisent une paire qui
contient le rsultat attendu. Cette paire en sortie peut avoir la mme cl que celle de lentre.
1.4.8. Exemple
Une entreprise de tlphonie veut calculer la dure totale des appels tlphoniques dun abonn
partir dun fichier CSV contenant tous les appels de tous les abonns (n dabonn, n appel, date,
dure dappel). Ce problme se traite ainsi :
1. En entre, on a le fichier des appels (1 appel par ligne)
2. YARN lance une instance de la fonction Map par appel
23
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
3. Chaque instance de Map reoit une paire (offset, ligne) et produit une paire (n abonn, dure)
ou rien si cest pas labonn quon veut. NB: loffset ne sert rien ici.
4. YARN envoie toutes les paires vers une seule instance de Reduce (car il ny a quune seule cl
diffrente)
5. Linstance de Reduce additionne toutes les valeurs des paires quelle reoit et produit une seule
paire en sortie (n abonn, dure totale)
1.4.9. Remarques
En ralit, il ny a pas quune seule instance de Reduce, il y en a plusieurs pour faire la rduction
de manire hirarchique plus rapidement. Car en gnral lalgorithme quon crit dans la fonction
Reduce est une boucle sur chaque valeur reue.
galement, en ralit, il ny a pas une instance de Map par ligne de donnes. Cest la vision quon
peut avoir en tant que programmeur, mais a conduirait un nombre gigantesque dinstances pour
traiter un norme fichier. En fait, YARN instancie un seul Mappeur par machine esclave et appelle
sa mthode map plusieurs reprises pour traiter les donnes squentiellement.
Ce cours fait plusieurs simplifications comme cela afin de rester comprhensible pour une premire
dcouverte de Hadoop.
1.4.11. Un schma
24
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
6. Les tches Reduce reoivent une liste de paires et effectuent la rduction des valeurs (max, sum,
avg. . . ). Elles mettent seulement la valeur finale. Elles peuvent tre mises en cascade quand il
y a beaucoup de paires.
25
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
context.write(cleI, valI);
}
}
1.5.3. Explications
La classe Mapper est paramtre par 4 types. Hlas, ce ne sont pas les types standard de Java, mais
des types spciaux permettant de transmettre efficacement des donnes entre les diffrents ordinateurs
du cluster. a complique lgrement les programmes.
type description
Text chane UTF8 quelconque
BooleanWritable reprsente un boolen
IntWritable entier 32 bits
LongWritable entier 64 bits
FloatWritable rel IEEE 32 bits
DoubleWritable rel IEEE 64 bits
val.set(35);
int v = val.get();
26
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
1.5.8. Explications
La mthode reduce reoit une collection de valeurs venant du Mapper. CleI et ValeursI sont les cls
et valeurs intermdiaires. Il faut itrer sur chacune pour produire la valeur de sortie du rducteur.
Comme pour map, la classe est paramtre par les types des cls et des valeurs manipuler. Ce sont
des Writable : Text, IntWritable. . .
Une chose cruciale nest pas du tout vrifie par Java : il est obligatoire que les types des cls TypCleI
et valeurs dentre TypValI du rducteur soient exactement les mmes que les types des cls et valeurs
de sortie du mapper. Si vous mettez des types diffrents, a passera la compilation mais plantera
lexcution.
27
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
job.setMapperClass(TraitementMapper.class);
job.setReducerClass(TraitementReducer.class);
1.5.11. Explications
La mthode run est charge de crer et lancer un Job. Il faut noter que la spcification Hadoop a
beaucoup chang depuis les premires versions. Il faut actuellement faire ainsi :
1. Obtenir une instance de Configuration. Elle contient les options telles que les formats des
fichiers, leur nom HDFS complet, leur codec de compression. . . voir le prochain cours.
2. Crer un Job, lui indiquer les classes concernes : mapper et reducer.
3. Fournir les noms complets des fichiers traiter et produire.
4. Indiquer les types des cls et valeurs. Par dfaut, ce sont des Text.
5. Attendre la fin du job et retourner un code derreur.
Davantage de dtails au prochain cours.
28
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
2. Emballage dans un fichier jar. NB: cest plus compliqu quand il y a des packages.
4. Lancement
29
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
Semaine 2
Le cours de cette semaine prsente davantage de dtails sur les jobs MapReduce dans YARN :
spcification des entres
spcification des paires (cl, valeurs)
spcification des sorties
traitement de certains fichiers
MapReduce dans dautres langages sur YARN
30
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
Exemple :
job.setNumReduceTasks(1);
job.setPriority(JobPriority.LOW);
job.setInputFormatClass(TextInputFormat.class);
Important: les types des cls et valeurs du Mapper doivent concider avec la classe indique pour le
fichier.
Ici, la classe TextInputFormat est une sous-classe de FileInputFormat<LongWritable,Text>. Donc
il faut crire :
31
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
job.setInputFormatClass(KeyValueTextInputFormat.class);
Elles sont absolument obligatoires quand ce ne sont pas les types par dfaut, ClassCastException
lors du lancement du reducer sinon.
32
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
job.setOutputFormatClass(TextOutputFormat.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(DoubleWritable.class);
class TraitementReducer
extends Reducer<..., Text, DoubleWritable>
La classe TextOutputFormat<K,V> est paramtre par les types des cls et des valeurs. Par dfaut,
ce sont tous deux des Text.
Il existe dautres classes pour produire les donnes de sortie (voir plus loin), dont des crivains sur
mesure (voir en TP).
YARN enregistre un fichier par Reducteur final. Leurs noms sont part-r-00000, part-r-00001,. . .
job.setOutputFormatClass(SequenceFileOutputFormat.class);
if (job.waitForCompletion(true)) {
SequenceFile.Reader.Option fichier =
SequenceFile.Reader.file(new Path(args[1],"part-r-00000"));
SequenceFile.Reader reader =
new SequenceFile.Reader(conf, fichier);
IntWritable annee = new IntWritable();
FloatWritable temperature = new FloatWritable();
while (reader.next(annee, temperature)) {
System.out.println(annee + " : " + temperature);
}
reader.close();
}
33
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
de Java. Celle de Java construit des structures plus lourdes que celle de Hadoop, parce quelle conti-
ennent les noms des types des donnes, tandis que les Writable ne contiennent que les octets des
donnes, et dautre part les Writable sont modifiables (mutables).
Il existe diffrents types de Writable pour des collections. On va donner lexemple dun Writable
spcifique drivant dun type tableau.
34
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
35
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
36
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
2.3. Efficacit
2.3.1. Remarque importante sur lefficacit
Il faut viter toute allocation mmoire rpte comme :
Il vaut mieux crer les objets hors de la boucle et utiliser leur modificateur ainsi :
37
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
38
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
39
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
2. On ne peut pas employer un Combiner quand la fonction nest pas commutative et associative.
3. Les Combiners reoivent leurs paires dun seul Mapper, tandis que les Reducers reoivent les
paires de tous les Combiners et/ou tous les Mappers. Les Combiners ont une vue restreinte des
donnes.
4. Hadoop nest pas du tout oblig de lancer un Combiner, cest seulement une optimisation locale.
Il ne faut donc pas concevoir un algorithme map-combine-reduce dans lequel le Combiner
jouerait un rle spcifique.
##!/usr/bin/python
## -*- coding: utf-8 -*-
40
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
import sys
## traiter chaque ligne de l'entre standard
for ligne in sys.stdin:
# couper en mots et traiter chacun d'eux
for mot in ligne.split():
# trivialement: ce mot est en 1 exemplaire
paire = (mot, 1)
# crire la paire
print '%s\t%s' % paire
Chaque ligne est dcoupe en mots ; chacun est crit en tant que cl, avec la valeur 1 sur stdout.
cle_prec,nombre_total = None,0
for ligne in sys.stdin:
cle, valeur = ligne.split('\t', 1)
if cle == cle_prec:
nombre_total += int(valeur)
else:
if cle_prec != None:
paire = (cle_prec, nombre_total)
print '%s\t%s' % paire
cle_prec = cle
nombre_total = int(valeur)
if cle_prec != None:
paire = (cle_prec, nombre_total)
print '%s\t%s' % paire
41
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
42
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
Semaine 3
Le cours de cette semaine explique comment crer une application MapReduce pour YARN complte.
Deux projets vont tre expliqus. Ils concernent des statistiques sur des documents.
calcul de la variance
calcul de la valeur mdiane
On va appliquer a la longueur des lignes de textes, mais a pourrait tre la dure de sjour sur une
place de parking payante, la temprature mesure midi, le nombre de sangliers dans les forts. . .
3.0.1. Application
Soient des donnes : des romans sous forme de fichiers texte. On sintresse la longueur des lignes
(pourquoi ? mystre. . . ).
1897
DRACULA
by Bram Stoker
CHAPTER I.
JONATHAN HARKERS JOURNAL.
(Kept in shorthand.)
43
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
1X
Vx = (xi m)2
n i
44
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import org.apache.hadoop.io.Writable;
Notez les types : cest du Big Data , donc potentiellement, les donnes peuvent tre normes. Un
int est limit 2 milliards.
public Variance()
{
clear();
}
45
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
sortie.writeDouble(Sx2);
}
46
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
Voila. Cest tout ce quil y a dans la classe Variance. Cette classe peut facilement tre intgre dans
un autre projet ou modifie pour un autre calcul mathmatique du mme genre (cumul de valeurs).
@Override
public void map(LongWritable cleE, Text valeurE, Context context)
throws IOException, InterruptedException
{
valeurI.set( valeurE.getLength() );
context.write(cleI, valeurI);
}
valeurE contient lune des lignes du texte traiter. cleE contient son offset, cest dire le numro
du premier octet de la ligne.
47
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
3.1.13. Combiner
Ce processus est optionnel de deux manires : dune part on peut sen passer, et dautre part, mme
programm, il nest pas forcment lanc par YARN. Sil est lanc, il est associ un Mapper et il
tourne pour rduire les donnes venant dune seule machine.
Son rle est davancer le travail du Reducer. On va lui demander de calculer les sommes partielles.
Comme il se trouve entre le Mapper et le Reducer, son entte est :
On doit remettre les mmes types en entre et en sortie pour les cls et valeurs. ~
La cl dentre est recopie en sortie et les valeurs dentre sont additionnes. On va retrouver ce
mme schma dans le reducer.
La cl de sortie sera encore la mme cl. Cest comme a quand on calcule une information synthtique
sur la totalit des donnes. On aurait des cls diffrentes sil fallait distinguer diffrentes variances.
48
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
@Override
public void reduce(Text cleI, Iterable<Variance> valeursI, Context context)
throws IOException, InterruptedException
{
Text cleS = cleI;
total.clear();
for (Variance valeur : valeursI) {
total.add(valeur);
}
valeurS.set( total.getVariance() );
context.write(cleS, valeurS);
}
3.1.18. Driver
Il a plusieurs choses faire :
Vrifier les paramtres. Ils sont dans le tableau String[] args pass en paramtre de la
mthode.
Crer le job YARN
Dfinir les classes des Mapper, Combiner et Reducer afin que YARN sache quoi lancer
Dfinir les types des cls et valeurs sortant du Mapper
Dfinir les types des cls et valeurs sortant du Reducer
49
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
Cest ncessaire car une fois compil, rien ne dit YARN quelle classe fait quoi. Le projet suivant
montrera une situation o il y a deux MapReduce successifs, donc plusieurs classes pour le mme
type de travail.
50
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
La classe TextInputFormat fait que les paires fournies au mapper seront des (LongWritable, Text).
Le reducer crira le rsultat, une paire (Text, DoubleWritable) dans un fichier appel part-r-00000
dans le dossier de sortie.
La mthode run doit retourner un code derreur : 0=ok, 1=erreur. Or la mthode waitForCompletion
retourne un boolen valant true si cest ok, false si a a plant.
Tlcharger le projet complet VarianceLongueurLignes.tar.gz.
2. Cration dune archive jar. On doit dire quelle est la classe principale, celle qui contient
main().
Cest plus compliqu si les fichiers source sont placs dans un dossier src et quil faut un dossier bin
pour mettre les binaires, et aussi sil y a des paquetages. Voir le Makefile des TP.
51
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
3. Affichage des messages. Il faut connatre lidentifiant de lapplication. Il est affich dans les
premires lignes suivant le lancement. Il est utile de rajouter | more la commande.
3.1.26. Bilan
crire le calcul la manire MapReduce
Lcriture initiale ne le permet pas. Il faut trouver un moyen de r-crire la formule afin de
parallliser les calculs. Ici, ce sont les sommes partielles sur plusieurs donnes (1, x et x2 ) qui
peuvent tre faites simultanment par les combiners. Par contre, cela demande des connaissances
en mathmatiques (Thorme de Knig-Huygens, wikipedia) qui sont hors comptence.
Si on ne trouve pas les bonnes formules, on ne peut pas faire le travail en MapReduce.
Dfinir la structure de donnes change entre les mappers et le reducer
Si on ne peut pas faire avec les types prdfinis simples, on doit implmenter la classe Writable
et rajouter les mthodes utiles.
52
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
La somme des nombres dun ct, par exemple gauche entre 0 et 63 est juste infrieure la moiti
du nombre total de lignes.
53
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
54
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
...
Job etape2 = Job.getInstance(conf, "MedianeLongueurLignes2");
etape2.setJarByClass(MedianeLongueurLignesDriver.class);
...
if (!etape1.waitForCompletion(true)) return 1;
if (!etape2.waitForCompletion(true)) return 1;
etape1.setOutputFormatClass(SequenceFileOutputFormat.class);
FileOutputFormat.setOutputPath(etape1, PathTMP1);
etape1.setOutputKeyClass(IntWritable.class);
etape1.setOutputValueClass(LongWritable.class);
etape2.setInputFormatClass(SequenceFileInputFormat.class);
FileInputFormat.addInputPath(etape2, PathTMP1);
@Override
public void map(IntWritable cleE, LongWritable valeurE, Context context)
throws IOException, InterruptedException
{
context.write(cleI, valeurE);
}
}
55
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
3.2.11. Le post-traitement
Le premier MapReduce produit un fichier (temporaire) contenant des paires (longueur de ligne,
nombre de lignes de cette longueur). On a vu que ctait un SequenceFile.
Le second MapReduce produit un fichier (temporaire) contenant une seule paire (0, nombre de
lignes total). Cest un simple fichier texte sur HDFS.
Il y a maintenant deux choses faire :
1. Rcuprer le nombre de lignes total issu du second MapReduce
2. Rcuprer et traiter lhistogramme issu du premier MapReduce
Ce qui est important, cest que YARN fait trier les lignes sortant du reducer dans lordre croissant
des cls. Cest dire lhistogramme sera automatiquement dans lordre.
SequenceFile.Reader.Option fichier =
SequenceFile.Reader.file(new Path(TMP1,"part-r-00000"));
SequenceFile.Reader reader = new SequenceFile.Reader(conf, fichier);
try {
IntWritable longueur = new IntWritable();
LongWritable nombre = new LongWritable();
while (reader.next(longueur, nombre)) {
// traiter le couple (longueur, nombre)
...
}
System.out.println("resultat : "+resultat);
56
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
} finally {
reader.close();
}
On peut amliorer pour retourner une interpolation entre la longueur actuelle et sa prcdente, selon
le dpassement de la limite.
3.2.15. Bilan
Cet exemple a montr comment exploiter les rsultats dun ou plusieurs MapReduce dans un mme
programme. Plusieurs formats de fichiers peuvent tre employs.
Tlcharger le projet complet MedianeLongueurLignes.tar.gz.
57
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
Semaine 4
Pig
Le cours de cette semaine prsente le systme Pig et son langage Pig Latin. Ce dernier est un langage
de programmation de requtes sur des fichiers HDFS qui se veut plus simple que Java pour crire des
jobs MapReduce. Pig sert lancer les programmes Pig Latin dans lenvironnement Hadoop.
4.1. Introduction
4.1.1. Prsentation de Pig
Apache Pig est un logiciel initialement cr par Yahoo!. Il permet dcrire des traitement utiles
sur des donnes, sans subir la complexit de Java. Le but est de rendre Hadoop accessible des
non-informaticiens scientifiques : physiciens, statisticiens, mathmaticiens. . .
Pig propose un langage de scripts appel Pig Latin . Ce langage est qualifi de Data Flow
Language . Ses instructions dcrivent des traitements sur un flot de donnes. Conceptuellement, a
ressemble un tube Unix ; chaque commande modifie le flot de donnes qui la traverse. Pig Latin
permet galement de construire des traitements beaucoup plus varis et non-linaires.
Pig traduit les programmes Pig Latin en jobs MapReduce et intgre les rsultats dans le flot.
Pour lexcuter : pig programme.pig. a lance un job MapReduce dans Hadoop. On peut aussi
taper les instructions une par une dans le shell de Pig.
Le but de ce cours : comprendre ce script et en crire dautres.
58
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
En SQL, on construit des requtes qui dcrivent les donnes obtenir. On ne sait pas comment
le moteur SQL va faire pour calculer le rsultat. On sait seulement quen interne, la requte
va tre dcompose en boucles et en comparaisons sur les donnes et en utilisant au mieux les
index.
En Pig Latin, on construit des programmes qui contiennent des instructions. On dcrit
exactement comment le rsultat doit tre obtenu, quels calculs doivent tre faits et dans quel
ordre.
galement, Pig a t conu pour les donnes incertaines de Hadoop, tandis que SQL tourne sur des
SGBD parfaitement sains.
Le mme alias peut tre rutilis dans des instructions diffrentes, ce qui cre des bifurcations dans le
flot de traitement : sparations ou regroupements.
Il nest pas recommand de raffecter le mme alias.
59
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
Linstruction LOAD 'fichier.csv' AS schma; permet de lire un fichier CSV et den faire une
relation daprs le schma indiqu.
60
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
S1 (3,8,9) (4,5,6)
S2 (1,4,7) (3,7,5)
S3 (2,5,8) (9,5,8)
L1 {(3,8,9),(4,5,6)}
L2 {(4,8,1),(6,3,7),(7,4,5),(5,2,9),(2,7,1)}
L3 {(4,3,5),(6,7,1),(3,1,7)}
Explications :
Le deuxime champ du schma est spcifi ainsi :
nom du champ :{ type du contenu du sac }
Les donnes de ce champ doivent tre au format
{ liste de valeurs correspondant au type }
1 [nom#asterix,metier#guerrier]
2 [nom#tintin,metier#journaliste]
3 [nom#spirou,metier#groom]
Remarque : toutes ces constructions, tuple, map et bags peuvent tre imbriques, mais certaines
combinaisons sont difficiles spcifier.
61
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
62
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
DESCRIBE relation;
Affiche le schma, cest dire les champs, noms et types, de la relation. Cest utiliser ds
quon a un doute sur le programme.
SAMPLE relation;
Affiche quelques n-uplets choisis au hasard, une sorte dchantillon de la relation.
a ressemble totalement ce quon fait avec SQL. Voir lexemple du transparent suivant.
Retourne une relation ayant un premier champ supplmentaire, le rang des n-uplets par rapport au
critre indiqu.
LIMIT relation N
On lutilise en gnral avec ORDER. Par exemple, cette instruction affiche les 10 plus gros achats :
La condition :
comparaisons : mmes oprateurs quen C et en Java
nullit (vide) dun champ : IS NULL, IS NOT NULL
connecteurs logiques : (mmes oprateurs quen SQL) AND, OR et NOT
63
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
DISTINCT relation;
Note: 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 employer un
FOREACH, voir plus loin.
Cre une nouvelle relation contenant les champs indiqus. a peut tre des champs de la relation
fournie ou des valeurs calcules ; la clause AS permet de leur donner un nom.
Exemple, on gnre des bons dachats gaux 5% du total des achats des clients :
64
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
1, 1, 12.50
2, 2, 21.75
3, 3, 56.25
4, 1, 34.00
5, 3, 3.30
65
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
4.3.14. Oprateurs
Pig propose plusieurs oprateurs permettant dagrger les valeurs dun sac. Le sac est construit par
un GROUP BY ou GROUP ALL.
SUM,AVG calcule la somme/moyenne des valeurs numriques.
MAX,MIN retournent la plus grande/petite valeur
COUNT calcule le nombre dlments du sac sans les null
COUNT_STAR calcule le nombre dlments avec les null
Il y a dautres oprateurs :
CONCAT(v1, v2, ...) concatne les valeurs fournies.
DIFF(sac1, sac2) compare les deux sacs et retourne un sac contenant les lments qui ne sont
pas en commun.
SIZE retourne le nombre dlments du champ fourni.
(1, 34.0)
(1, 12.5)
(3, 56.25),
(3, 3.30)
66
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
La relation achat du FILTER dsigne le second champ du GROUP achatsparclient trait par le
FOREACH.
67
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
GENERATE group.a1,group.a2,group.a3,
FLATTEN(seul.a4),FLATTEN(seul.a5);
}
Cela cre une relation ayant autant de champs que toutes les relations mentionnes. Les n-uplets
quon y trouve sont ceux du produit cartsien 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 nomms relation1::champ1a, relation1::champ1b, . . .
1 lucien
2 andr
3 marcel
1, 1, 12.50
2, 2, 21.75
3, 3, 56.25
4, 1, 34.00
5, 3, 3.30
(1,lucien,4,1,34.25)
(1,lucien,1,1,12.5)
(2,andr,2,2,21.75)
(3,marcel,3,3,56.25)
(3,marcel,5,3,3.30)
68
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
Il est trs prfrable que les relations aient les mmes schmas. Chaque champ cre sa propre colonne.
4.4. Conclusion
4.4.1. Comparaison entre SQL et Pig (le retour)
Revenons sur une comparaison entre SQL et Pig. Soit une petite base de donnes de clients et
dachats. La voici en SQL ; en Pig, a sera deux fichiers CSV.
69
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
Semaine 5
Spark
Le cours de cette semaine prsente le systme de programmation Spark, un autre mcanisme de Hadoop
pour crire des programmes de type MapReduce, nettement plus performants et plus polyvalents
que ceux bass sur YARN. Nous programmerons sur Spark en Python, mais dautres langages sont
possibles.
5.1. Introduction
5.1.1. Prsentation de Spark
Spark est une API de programmation parallle sur des donnes.
Lobjet principal de Spark est le RDD : Resilient Distributed Dataset. Cest un dispositif pour traiter
une collection de donnes par des algorithmes parallles robustes. Un RDD ne contient pas vraiment
de donnes, mais seulement un traitement.
Ce traitement nest effectu que lorsque cela apparat ncessaire. On appelle cela lvaluation
paresseuse. Dautre part, Spark fait en sorte que le traitement soit distribu sur le cluster, donc
calcul rapidement, et nchoue pas mme si des machines tombent en panne.
70
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
On souhaite afficher lanne de plantation (champ n6) de larbre le plus grand (champ n7).
Avec des commandes Unix, ce traitement scrirait :
Par contre, jaurais apprci que cut permette de changer lordre des champs, a aurait facilit le classement.
##!/usr/bin/python
from pyspark import SparkConf, SparkContext
sc = SparkContext(conf=SparkConf().setAppName("arbres"))
arbres = sc.textFile("hdfs:/share/paris/arbres.csv")
tableau = arbres.map(lambda ligne: ligne.split(';'))
paires = tableau.map(lambda champs: (champs[6],champs[5]))
pairesok1 = paires.filter(
lambda (hauteur,annee): hauteur!='' and hauteur!='HAUTEUR')
pairesok2 = pairesok1.map(
lambda (hauteur,annee): (float(hauteur), annee))
classement = pairesok2.sortByKey(ascending=False)
print classement.first()
5.1.6. Remarques
Les deux premires instructions consistent extraire les donnes du fichier. Cest dassez bas niveau
puisquon travaille au niveau des lignes et des caractres.
Dans MapReduce sur YARN, ces aspects avaient t isols dans une classe Arbres qui masquait les
dtails et fournissait des mthodes pratiques, comme getHauteur et getAnnee.
Compar aux programmes MapReduce en Java, Spark parat plus rustique. Mais cest sa rapidit,
entre 10 et 100 fois suprieure YARN qui le rend extrmement intressant.
71
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
On programme en Spark un peu comme dans le TP2 : la problmatique est 1) darriver construire
des RDD contenant ce dont on a besoin et 2) dcrire des fonctions de traitement.
5.1.7. Lancement
Spark offre plusieurs manires de lancer le programme, dont :
Lancement sur un cluster de Spark Workers
spark-submit --master spark://$(hostname -f):7077 \
arbres.py
Loption --master de cette commande indique Spark quon doit faire appel au cluster de
machines sur lesquelles tournent des Spark Workers. Ce sont des processus clients chargs de
faire les calculs distribus pour Spark.
Spark permet aussi de lancer lexcution sur YARN :
spark-submit --master yarn-cluster arbres.py
Ce sont les esclaves YARN qui excutent le programme Spark.
5.1.8. Commentaires
Le programme prcdent fait appel des lambda. Ce sont des fonctions sans nom (anonymes).
Voici une fonction avec un nom employe dans un map Python :
def double(nombre):
return nombre * 2
map(double, [1,2,3,4])
La syntaxe est lambda paramtres: expression. a cre une fonction qui na pas de nom mais
quon peut placer dans un map.
72
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
def separ(ligne):
return ligne.split(';')
def hauteurannee(champs):
return (champs[6],champs[5])
def garderok( (cle,val) ):
return cle!='' and cle!='HAUTEUR'
def convfloat( (cle, val) ):
return (float(cle), val)
tableau = arbres.map(separ)
paires = tableau.map(hauteurannee)
pairesok1 = paires.filter(garderok)
pairesok2 = pairesok1.map(convfloat)
total = 0
def cumuler(champs):
global total
73
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
total += float(champ[6])
return champ[5]
annees = tableau.map(cumuler)
Il y a quand mme des variables globales dans Spark, mais on nen parlera pas dans ce cours.
##!/usr/bin/python
from pyspark import SparkConf, SparkContext
nomappli = "essai1"
config = SparkConf().setAppName(nomappli)
sc = SparkContext(conf=config)
sc reprsente le contexte Spark. Cest un objet qui possde plusieurs mthodes dont celles qui crent
des RDD.
Pour lancer le programme, faire : spark-submit essai1.py
5.2.3. RDD
Un RDD est une collection de donnes abstraite, rsultant de la transformation dun autre RDD ou
dune cration partir de donnes existantes. Un RDD est distribu, cest dire rparti sur plusieurs
machines afin de parallliser les traitements.
On peut crer un RDD de deux manires :
Parallliser une collection
74
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
Si votre programme contient des donnes itrables (tableau, liste. . . ), elles peuvent devenir un RDD.
RDD = sc.textFile("hdfs:/share/data.txt")
Comme avec MapReduce, chaque ligne du fichier constitue un enregistrement. Les transformations
appliques sur le RDD traiteront chaque ligne sparment. Les lignes du fichier sont distribues sur
diffrentes machines pour un traitement parallle.
RDD = sc.sequenceFile("hdfs:/share/data1.seq")
RDD.saveAsSequenceFile("hdfs:/share/data2.seq")
5.2.6. Actions
Avant de voir les transformations, voyons les actions. Ce sont des mthodes qui sappliquent un
RDD pour retourner une valeur ou une collection.
liste = RDD.collect() retourne le RDD sous forme dune liste Python. Attention la taille
si cest du BigData.
nombre = RDD.count() retourne le nombre dlments
75
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
5.2.7. Transformations
Les RDD possdent plusieurs mthodes qui ressemblent aux fonctions map, filter, etc. de Python.
En Python ordinaire, map est une fonction dont le premier paramtre est une lambda ou le nom dune
fonction, le second paramtre est la collection traiter :
liste = [1,2,3,4]
doubles = map(lambda n: n*2, liste)
En pySpark, map est une mthode de la classe RDD, son seul paramtre est une lambda ou le nom
dune fonction :
liste = sc.parallelize([1,2,3,4])
doubles = liste.map(lambda n: n*2)
RDD = sc.parallelize([1,2,3,4])
print RDD.map(lambda n: n+1).collect()
RDD = sc.parallelize([1,2,3,4])
print RDD.filter(lambda n: (n%2)==0).collect()
76
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
RDD = sc.parallelize([0,1,2,3])
print RDD.flatMap(lambda n: [n]*n).collect()
En Python, la notation [chose]*n produit la liste [ chose chose chose. . . ] contenant n lments. Si
n=0, a cre une liste vide. Exemple ['ok']*3 vaut ['ok', 'ok', 'ok'].
Donc, ici, les rsultats de la lambda sont [], [1], [2, 2], [3, 3, 3] et au retour du flatMap on
aura [1, 2, 2, 3, 3, 3]
77
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
78
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
Semaine 6
SparkSQL
Le cours de cette semaine prsente le systme SparkSQL. Cest une sur-couche de Spark permettant
dinterroger des donnes laide de SQL directement, et aussi dune API ayant des fonctions identiques.
6.1. SparkSQL
6.1.1. Prsentation
SparkSQL rajoute une couche simili-SQL au dessus des RDD. a sappuie sur deux concepts :
DataFrames Ce sont des tables SparkSQL : des donnes sous forme de colonnes nommes. On peut
les construire partir de fichiers JSON, de RDD ou de tables Hive (voir le dernier cours).
RDDSchema Cest la dfinition de la structure dun DataFrame. Cest la liste des colonnes et de
leurs types. Un RDDSchema peut tre dfini laide dun fichier JSON.
Il y a des liens entre DataFrame et RDD. Les RDD ne sont que des donnes, des n-uplets bruts. Les
DataFrames sont accompagnes dun schma.
##!/usr/bin/python
from pyspark import SparkConf, SparkContext, SQLContext
from pyspark.sql.functions import *
nomappli = "essai1"
config = SparkConf().setAppName(nomappli)
sc = SparkContext(conf=config)
sqlContext = SQLContext(sc)
sqlContext reprsente le contexte SparkSQL. Cest un objet qui possde plusieurs mthodes dont
celles qui crent des DataFrames et celles qui permettent de lancer des requtes SQL.
79
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
Un fichier JSON est pratique car il contient la fois les donnes et le schma, mais a ne convient
que pour de petites donnes.
Un fichier JSON contient la srialisation dune structure de donnes JavaScript. Pour les donnes
qui nous intressent, cest simple. Chaque n-uplet est englob par {...} ; les champs sont crits
"nom":"valeur". Voici un exemple de trois n-uplets :
{"nom":"Paul"}
{"nom":"mile", "age":30}
{"nom":"Victor", "age":19}
colonneAge = df.age
Note: si une proprit est vide ou vaut null, python voit None.
La proprit columns retourne la liste des noms des colonnes :
80
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
print df.columns
La classe DataFrame possde de nombreuses mthodes qui seront prsentes plus loin, page 82.
personnes.registerTempTable("personnes")
Le DataFrame df pourra tre utilis dans une requte SQL sous le nom personnes. Il est donc
commode de remettre le mme nom que le DataFrame.
NB: ce nest quune table temporaire, elle disparat la fin du programme.
Le rsultat de la mthode sql est un nouveau DataFrame contenant les n-uplets demands (doc-
umentation). On les affiche laide dune simple boucle et dun appel collect() comme en
pySpark.
Un autre moyen pour crire des requtes est dappeler les mthodes de lAPI.
81
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
En pySparkSQL :
82
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
6.2.5. Agrgation
groupBy(colonnes) regroupe les n-uplets qui ont la mme valeur pour les colonnes qui sont
dsignes par une chane SQL. Cette mthode retourne un objet appel GroupedData sur lequel
on peut appliquer les mthodes suivantes :
count() : nombre dlments par groupe
avg(colonnes) : moyenne des colonnes par groupe
max(colonnes), min(colonnes) : max et min des colonnes par groupe
sum(colonnes) : addition des colonnes par groupe
tapc = achats.groupBy("idclient").sum("montant")
napc = achats.groupBy("idclient").count()
Lagrgation cre des colonnes appeles daprs la fonction : "AVG(montant)", "MAX(montant)", etc.
6.2.6. Classement
sort(colonnes) classe les n-uplets de self selon les colonnes, dans lordre croissant. Si on
spcifie la colonne par un nom pyspark (table.champ, on peut lui appliquer la mthode desc()
pour classer dans lordre dcroissant ; sinon, il faut employer la fonction desc(colonnes) pour
classer dans lordre dcroissant.
topa = achats.groupBy("idclient").sum("montant") \
.sort(desc("SUM(montant)")).first()
83
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
Semaine 7
HBase
Le cours de cette semaine se tourne vers la reprsentation des donnes complexes dans Hadoop. HBase
est une base de donnes adapte aux mgadonnes.
7.1. Introduction
7.1.1. Prsentation de HBase
HBase est un systme de stockage efficace pour des donnes trs volumineuses. Il permet daccder aux
donnes trs rapidement mme quand elles sont gigantesques. Une variante de HBase est notamment
utilise par FaceBook pour stocker tous les messages SMS, email et chat, voir cette page.
HBase mmorise des n-uplets constitus de colonnes (champs). Les n-uplets sont identifis par une
cl. laffichage, les colonnes dun mme n-uplet sont affiches successivement :
84
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
7.1.6. Exemple
On veut enregistrer les coordonnes et les achats de clients. On va construire une table contenant
trois familles :
La famille personne contiendra les informations de base :
85
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
client1
client10
client11
client2
client3
86
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
hbase shell
Il faut savoir que cest le langage Ruby qui sert de shell. Les commandes sont crites dans la syntaxe
de ce langage.
2
Une volution de HBase est demande pour permettre plusieurs serveurs sur une mme rgion.
87
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
88
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
La premire variante affiche toutes les colonnes ayant cette cl. La deuxime affiche toutes les valeurs
avec leur timestamp.
7.2.8. Filtres
Lensemble des filtres dun scan doit tre plac entre "...".
Plusieurs filtres peuvent tre combins avec AND, OR et les parenthses.
Exemple :
{ FILTER =>
"PrefixFilter('client') AND ColumnPrefixFilter('achat')" }
89
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
OPCMP doit tre lun des oprateurs <, <=, =, !=, > ou >= (sans mettre de quotes autour)
VAL est une constante qui doit valoir :
'binary:chaine' pour une chane telle quelle
'substring:chaine' pour une sous-chane
'regexstring:motif' pour un motif egrep, voir la doc.
Exemple :
90
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
Noter quon se bat contre le temps, HBase volue trs vite et de nombreux aspects deviennent
rapidement obsoltes (deprecated). LAPI tait en 0.98.12 cette anne (hadoop 2.7.1), maintenant
cest la 2.0 et la 3.0 est dj annonce.
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.*;
Ensuite, chaque programme contient ces lignes (API 0.98) qui tablissent une connexion avec le
serveur HBase :
Notez que jai fourni le HBaseAdmin en paramtre et que les familles sont sous forme de varargs.
91
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
92
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
Dans le cas de cls de n-uplets de type nombre (int, long, float et double), le classement des cls
sera fantaisiste cause de la reprsentation interne, voir cette page. Du fait que le signe du nombre
soit en tte et vaut 1 pour les nombres ngatifs, 0 pour les nombres positifs, un nombre ngatif sera
considr comme plus grand quun positif.
Il est possible dy remdier en trafiquant le tableau doctets afin dinverser le signe mais cest hors
sujet.
Dans certains cas, HBase nous retourne un grand tableau doctets dans lequel nous devons piocher
ceux qui nous intressent. Nous avons donc trois informations : le tableau, loffset du premier octet
utile et le nombre doctets. Il faut alors faire ainsi :
93
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
94
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
action.add(rawfam, rawcol);
rajouter des filtres sur les valeurs, par exemple ci-dessous, on cherche les colonnes suprieures
ou gales une limite.
NB: Il faut utiliser la classe CompareOp et BinaryComparator
95
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
Attention aux comparaisons de nombres. Elles sont bases sur la comparaison des octets internes, or
gnralement, les nombres ngatifs ont un poids fort plus grand que celui des nombres positifs.
96
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
Semaine 8
Hive et Cassandra
HBase est un mcanisme pour stocker des donnes trs volumineuses de type (cl, {valeurs. . . }) et y
accder trs rapidement, mais dune manire trs simpliste :
get 'meteo','id19971225203000','data:temperature'
Hive peut utiliser les donnes de HBase en tant que tables, Cassandra gre ses propres tables.
8.1. Hive
8.1.1. Prsentation rapide
Hive simplifie le travail avec une base de donnes comme HBase ou des fichiers CSV. Hive permet
dcrire des requtes dans un langage inspir de SQL et appel HiveQL. Ces requtes sont transformes
en jobs MapReduce.
Pour travailler, il suffit dfinir un schma qui est associ aux donnes. Ce schma donne les noms et
types des colonnes, et structure les informations en tables exploitables par HiveQL.
97
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
Le dbut est classique, sauf les contraintes dintgrit : il ny en a pas. La fin de la requte indique
que les donnes sont dans un fichier CSV. Voyons dabord les types des colonnes.
Les directives situes aprs le schma indiquent la manire dont les donnes sont stockes dans le
fichier CSV. Ce sont :
FIELDS TERMINATED BY ';' : il y a un ; pour sparer les champs
COLLECTION ITEMS TERMINATED BY ',' : il y a un , entre les lments dun ARRAY
MAP KEYS TERMINATED BY ':' : il y a un : entre les cls et les valeurs dun MAP
LINES TERMINATED BY '\n' : il y a un \n en fin de ligne
STORED AS TEXTFILE : cest un CSV.
NB: le problme est que Hive dplace le fichier CSV dans ses propres dossiers, afin de ne pas dupliquer
les donnes. Sinon, on peut crire CREATE EXTERNAL TABLE ... pour empcher Hive de capturer le
fichier.
On peut aussi charger un fichier local (pas HDFS) :
Le fichier est alors copi sur HDFS dans les dossiers de Hive.
98
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
La directive envoie les n-uplets concerns sur une seule machine afin de les comparer plus rapidement
pour tablir le classement.
99
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
8.2. Cassandra
8.2.1. Prsentation rapide
Cassandra est indpendant de HBase et mme de Hadoop. On peut configurer un cluster Cassandra
en dehors de Hadoop.
Il gre lui-mme la distribution et la rplication des donnes. Les traitements distribus sont
extrmement rapides, beaucoup plus quavec Hive.
Cassandra offre un langage dinterrogation appel CQL trs similaire SQL. Certains concepts sont
spcifiques.
100
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
101
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
nodetool info
nodetool status
cqlsh master
Cela ouvre un shell CQL dans lequel on tape les requtes (D ou exit pour quitter).
La premire connatre est HELP. On peut lui ajouter un paramtre, par exemple HELP DESCRIBE.
La stratgie SimpleStrategy convient pour les clusters locaux. Ici, les donnes seront rpliques en
2 exemplaires.
Suppression dun keyspace et de tout son contenu
DESCRIBE KEYSPACES;
Structure dun keyspace : cela affiche toutes les commandes servant le reconstruire ainsi que
ses tables
102
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
USE nomkeyspace;
On peut prfixer le nom de la table par nomkeyspace. si on est hors keyspace ou quon veut en
dsigner un autre.
Les dfinitions de colonnes sont comme en SQL : nom type. Les types sont boolean, int, float,
varchar, text, blob, timestamp, etc.
Il y a des types spciaux, comme counter, list, set, map, etc.
Contrairement SQL, les noms des colonnes concernes sont obligatoires, mais toutes les colonnes
nont pas obligation dy tre, les absentes seront affectes avec null.
Exemple :
103
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
On doit mettre les noms des colonnes dans le mme ordre que le fichier CSV. Ce dernier ne doit pas
contenir de ligne de titre.
Une table peut tre enregistre dans un fichier CSV par :
Les colonnes peuvent utiliser la notation * et faire appel aux fonctions dagrgation COUNT, MIN, MAX,
AVG, SUM.
Il y a une trs forte limite sur la clause WHERE : elle doit slectionner des n-uplets contigus. Donc cest
limit aux conditions sur les cls primaires ou secondaires (crer un index). Les versions rcentes
de Cassandra permettent de questionner sur des intervalles de cls, en ajoutant les mots-cls ALLOW
FILTERING.
104
IUT de Lannion P. Nerzic
Dept Informatique Outils Hadoop pour le Big Data 2016-17
105