1. www.bluestone.fr
55 rue du Faubourg Montmartre – 75009 Paris
+33 (0)1 53 25 02 10
contact@bluestone.fr
BS TEMPLATE 20120625
BASTIEN RIERA
2. Contexte
Qu’est-ce que le Big Data ?
Hadoop
RHadoop
Le MapReduce en pratique
Pour aller plus loin
Hollande vs Sarkozy
BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 2
3. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 3
Stage de fin d’étude :
Ensai 2012 – Marketing quantitatif et gestion de la relation client
Bluestone Consulting – Maître de stage : Julien Damon
Monitoring de la campagne présidentielle sur Twitter
Étude de l’influence de François Hollande et Nicolas Sarkozy
Analyse statistique en environnement Big Data
Choix du logiciel R
4.
5. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 5
« La Big Data est caractérisée par une accumulation
continue de tous les types de données atteignant une taille
et un niveau de granularité difficile à exploiter »
(Zouheir Guédri – Mars 2012)[1]
Les quatre V du Big Data (Alex Popescu – Fev 2012)[2] :
Volume
Variété
Vitesse
Valeur
6. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 6
Volume :
2011 : 1,8 ZettaOctet[3] au niveau mondial
Réseaux Sociaux : 400 millions de tweets publiés par jour en 2012[4]
Variété :
Structuré / Non structuré
Open Data
Réseaux Sociaux
Vitesse :
Flux d’information
Valeur :
5% des données sont compatibles avec l’analyse décisionnelle[3]
Open Data
API
7.
8. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 8
Open-source, fondation Apache
Exploité par : Microsoft, IBM, Oracle, EMC, …
Avantages
Stockage et calculs distribués
Nombre de nœuds évolutif
Fiable face aux défaillances matérielles
Inconvénients
Pas d’interface utilisateur
Aucune méthode d’analyse statistique
Hadoop Distributed File System (HDFS)
Division par bloc
Stockage distribué
MapReduce
9.
10. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 10
RHadoop
RevolutionAnalytics (Github)
Trois package R, rhbase, rhdfs, rmr
MapReduce : rmr
Avantages
Environnement R[5]
Transparent
Définition des fonctions Map et Reduce
Deux environnements : « local » et « hadoop »
Inconvénients
Peu de méthodes directement implémentées
Gestion des erreurs
11. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 11
rmr
12.
13. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 13
Association clef/valeur
Dualité Map/Reduce
Map = une observation
Reduce = agrégation
14. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 14
map=function(k,v){
…
k’= …
v’= …
keyval(k’,v’)
}
reduce = function(k’,list_v’){
…
k’’= …
v’’= …
keyval(k’’, v’’)
}
15. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 15
Association clef/valeur
Dualité Map/Reduce
Map = une observation
Reduce = agrégation
Nombre de tweets :
Map
tweet1
tweet2
tweet3
tweet4
tweet5
tweet6
tweet7
tweet8
tweet9
tweet10
tweet11
<NULL,1>
<NULL,1>
<NULL,1>
<NULL,1>
<NULL,1>
<NULL,1>
<NULL,1>
<NULL,1>
<NULL,1>
<NULL,1>
<NULL,1>
16. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 16
Association clef/valeur
Dualité Map/Reduce
Map = une observation
Reduce = agrégation
Nombre de tweets :
ReduceMap
tweet1
tweet2
tweet3
tweet4
tweet5
tweet6
tweet7
tweet8
tweet9
tweet10
tweet11
<NULL,1>
<NULL,1>
<NULL,1>
<NULL,1>
<NULL,1>
<NULL,1>
<NULL,1>
<NULL,1>
<NULL,1>
<NULL,1>
<NULL,1>
<NULL,11>
17. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 17
mapreduce(input=input,
map=function(k,v){
k’ = NULL
v’ = 1
keyval(k’, v’)
},
reduce = function(k’,list_v’){
k’’ = NULL
v’’= sum(unlist(list_v’))
keyval(k’’,v’’)
}
)
18. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 18
Nombre de tweets par utilisateur :
Map
tweet1
tweet2
tweet3
tweet4
tweet5
tweet6
tweet7
tweet8
tweet9
tweet10
tweet11
<id1,1>
<id2,1>
<id3,1>
<id1,1>
<id1,1>
<id1,1>
<id2,1>
<id3,1>
<id2,1>
<id1,1>
<id2,1>
19. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 19
Nombre de tweets par utilisateur :
Map
tweet1
tweet2
tweet3
tweet4
tweet5
tweet6
tweet7
tweet8
tweet9
tweet10
tweet11
<id1,1>
<id2,1>
<id3,1>
<id1,1>
<id1,1>
<id1,1>
<id2,1>
<id3,1>
<id2,1>
<id1,1>
<id2,1>
Map
Clef :
identifiant utilisateur
Valeur : 1
20. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 20
Nombre de tweets par utilisateur :
Regroupement
AutomatiqueMap
tweet1
tweet2
tweet3
tweet4
tweet5
tweet6
tweet7
tweet8
tweet9
tweet10
tweet11
<id1,1>
<id2,1>
<id3,1>
<id1,1>
<id1,1>
<id1,1>
<id2,1>
<id3,1>
<id2,1>
<id1,1>
<id2,1>
<id1,1>
<id1,1>
<id1,1>
<id1,1>
<id1,1>
<id2,1>
<id2,1>
<id2,1>
<id2,1>
<id3,1>
<id3,1>
Map
Clef :
identifiant utilisateur
Valeur : 1
21. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 21
Nombre de tweets par utilisateur :
Regroupement
AutomatiqueMap Reduce
tweet1
tweet2
tweet3
tweet4
tweet5
tweet6
tweet7
tweet8
tweet9
tweet10
tweet11
<id1,1>
<id2,1>
<id3,1>
<id1,1>
<id1,1>
<id1,1>
<id2,1>
<id3,1>
<id2,1>
<id1,1>
<id2,1>
<id2,4>
<id1,1>
<id1,1>
<id1,1>
<id1,1>
<id1,1>
<id2,1>
<id2,1>
<id2,1>
<id2,1>
<id3,1>
<id3,1>
<id3,2>
<id1,5>
<id1,5>
<id2,4>
<id3,2>
Map
Clef :
identifiant utilisateur
Valeur : 1
Reduce
Agrégation par clef
22. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 22
mapreduce(input = input ,
map=function(k,v){
k’ = v$user$id_str
v’ = 1
keyval(k’, v’)
},
reduce = function(k,list_v){
keyval(k, sum(unlist(list_v)))
}
)
23. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 23
Nombre de tweets moyen par utilisateur :
Reduce 1Regroupement
Automatique
Map
tweet1
tweet2
tweet3
tweet4
tweet5
tweet6
tweet7
tweet8
tweet9
tweet10
tweet11
<id1,1>
<id2,1>
<id3,1>
<id1,1>
<id1,1>
<id1,1>
<id2,1>
<id3,1>
<id2,1>
<id1,1>
<id2,1>
<NULL,5>
<NULL,4>
<NULL,2>
<id1,1>
<id1,1>
<id1,1>
<id1,1>
<id1,1>
<id2,1>
<id2,1>
<id2,1>
<id2,1>
<id3,1>
<id3,1>
24. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 24
Nombre de tweets moyen par utilisateur :
Reduce 1Regroupement
Automatique
Map
tweet1
tweet2
tweet3
tweet4
tweet5
tweet6
tweet7
tweet8
tweet9
tweet10
tweet11
<id1,1>
<id2,1>
<id3,1>
<id1,1>
<id1,1>
<id1,1>
<id2,1>
<id3,1>
<id2,1>
<id1,1>
<id2,1>
<NULL,5>
<NULL,4>
<NULL,2>
<id1,1>
<id1,1>
<id1,1>
<id1,1>
<id1,1>
<id2,1>
<id2,1>
<id2,1>
<id2,1>
<id3,1>
<id3,1>
Reduce 1 :
Agrégation par clef
Changement de clef
25. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 25
Nombre de tweets moyen par utilisateur :
Reduce 2Reduce 1Regroupement
Automatique
Map
tweet1
tweet2
tweet3
tweet4
tweet5
tweet6
tweet7
tweet8
tweet9
tweet10
tweet11
<id1,1>
<id2,1>
<id3,1>
<id1,1>
<id1,1>
<id1,1>
<id2,1>
<id3,1>
<id2,1>
<id1,1>
<id2,1>
<NULL,5>
<NULL,4>
<NULL,2>
<NULL, 3.7>
<id1,1>
<id1,1>
<id1,1>
<id1,1>
<id1,1>
<id2,1>
<id2,1>
<id2,1>
<id2,1>
<id3,1>
<id3,1>
Reduce 1 :
Agrégation par clef
Changement de clef
Reduce 2 :
Moyenne sur tous
les individus
26. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 26
input2=mapreduce( input = input ,
map= function(k,v) {
keyval(v$user$id_str,1)
},
reduce = function(k,list_v){
keyval(NULL, sum(unlist(list_v)))
}
)
mapreduce(input=input2,
reduce=function(k,list_v){
keyval(k,mean(unlist(list_v)))
}
)
27.
28. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 28
Étude de l’influence sur Twitter
Début : 19 mars 2012
(publication de la liste des candidats)
Fin : 5 mai 2012
(la veille des résultats du second tour)
130 mots clefs
16 millions de tweets récoltés
4 500 000 utilisateurs
53 Go
29. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 29
{ "_id":{ "$oid": "4f625e47e2a3f33c79000002" },
"truncated":false,
"retweet_count":0,
"source":"web",
"user":{ "screen_name":"Expat00007",
"followers_count":0,
"time_zone":"Amsterdam",
"location":null,
"lang":"fr",
"profile_image_url_https":"https://si0.twimg.com/sticky/default_profile_images/default_profile_5_normal.png",
"name":"Expat00007",
"id":525747899,
"geo_enabled":false,
"created_at":"Thu Mar 15 21:02:35 +0000 2012",
"friends_count":0,
"id_str":"525747899",
"profile_image_url":"http://a0.twimg.com/sticky/default_profile_images/default_profile_5_normal.png" },
"place":null,
"geo":null,
"text":"#FH réveille toi, Sarkozy lui, envoyait sévère, il a du punch, il répond du tac o tac, il sait de quoi il parle... il tergiverse pas !",
"coordinates":null,
"created_at":"Thu Mar 15 21:25:27 +0000 2012",
"entities":{ "hashtags": [{ "text":"FH",
"indices":[0,3] }],
"urls":[],
"user_mentions":[]},
"id":180404368162570240,
"id_str":"180404368162570240" }
30. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 30
F. Hollande :
1er personne
Candidat sortant
N. Sarkozy :
3eme personne
@fhollande
31. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 31
F. Hollande :
1er personne
Candidat sortant
#rennes…
N. Sarkozy :
3eme personne
@fhollande
#dpda…
32. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 32
F. Hollande :
228 776
N. Sarkozy :
174 967
33. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 33
Nombre de
Tweets
Nombre de
Retweets
Nombre de tracts
équivalent
François Hollande 712 30 854 12 107 411
Nicolas Sarkozy 609 42 796 13 769 105
34.
35. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 35
Structure des retweets
Estimation de la matrice « qui a retweeté qui »
Matrice stochastique
Matrice creuse de dimension 4 500 000 * 4 500 000
Évolution d’une mesure de probabilité
Produit matriciel
Mesure récursive du pouvoir d’influence
Prise en compte de la capacité d’influence des proches
Convergence itérative
Solution unique
36. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 36
François Hollande : 12eme
Nicolas Sarkozy : 14eme
Analystes politiques :
Le Véritomètre (rang 3)
Owni (rang 4)
Journalistes :
Soren Seelow (rang 24)
Leparmentier Arnaud (rang 26)
Politiques :
Vincent Feltesse (rang 17)
Jean-Luc Mélenchon (rang 20)
Etrangers :
Barack Obama (rang 6-7)
Breaking news (rang 13)
…
37. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 37
Structure des retweets
Estimation de la matrice « qui a retweeté qui »
Matrice stochastique
Matrice creuse de dimension 4 500 000 * 4 500 000
Évolution d’une mesure de probabilité
Produit matriciel
Mesure récursive du pouvoir d’influence
Prise en compte de la capacité d’influence des proches
Convergence itérative
Solution unique
38. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 38
Regroupement
Automatique
Map
tweet1
tweet2
tweet3
tweet4
tweet5
tweet6
tweet7
tweet8
tweet9
tweet10
tweet11
<id_Retweeter1,id_Author4>
<id_Retweeter2,id_Author4>
<id_Retweeter1,id_Author6>
<id_Retweeter1,id_Author6>
<id_Retweeter3,id_Author4>
<id_Retweeter3,id_Author5>
<id_Retweeter1,id_Author4>
<id_Retweeter1,id_Author6>
<id_Retweeter1,id_Author6>
<id_Retweeter2,id_Author4>
<id_Retweeter3,id_Author4>
<id_Retweeter3,id_Author5>
…
…
…
39. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 39
mapreduce(input=input,
map=function(k,v){
if(is.null(v$retweeted_status$user$id_str)){return()}
else{
retweeteur=v$user$id_str
retweete=v$retweeted_status$user$id_str
keyval(retweeteur,retweete)
}
},
…
40. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 40
Reduce
id_author4 | id_author6
<id_Retweeter1, 0.333 | 0.667 >…
…
…
id_author4 |
<id_Retweeter2, 1 | >
id_author4 | id_author5
<id_Retweeter1, 0.5 | 0.5 >
Matrice creuse
41. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 41
mapreduce(input=input,
map=function(k,v){
if(is.null(v$retweeted_status$user$id_str)){return()}
retweeteur=v$user$id_str
retweete=v$retweeted_status$user$id_str
keyval(retweeteur,retweete)
},
reduce=function(k,vv){
keyval(k,table(unlist(vv))/length(vv))
}
)
42. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 42
Matrice creuse
clef : id_Retweeter
valeur : data.frame :
(id_user, coefficient)
Vecteur de score d’influence
clef : id_user
valeur : score
Reduce
Reduce
Equijoin()
(Jointure sur les clefs)
Clef : id_Retweeter
Valeur 1 : (id_user, coefficient)
Valeur 2 : (score)
Clef : id_user
Valeur : coefficient*score
Nouveau vecteur de score
Clef : id_user
Valeur : nouveau_score = SUM(coefficient*score)
43. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 43
tmp=equijoin(
left.input=score,
right.input=matrice,
outer="left",
#map.right=function(…)
#map.left=function(…)
reduce.all=function(k, v.left, v.right){
k’=unlist(v.right[,1])
v’=unlist(as.numeric(v.right[,2])*as.numeric(v.left))
keyval(k’,v’)
}
)
mapreduce(
input=tmp,
reduce=function(k,v){
keyval(k’,sum(unlist(v’))
}
)
44. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 44
Autres fonctions R disponibles dans le package rmr
mapreduce(…)
Cadre fonctionnel permettant de définir
et de réaliser les traitements au format
MapReduce.
rmr.str(…) Équivalent de la fonction str() de R
rmr.sample(input, output = NULL, method = c("any", "Bernoulli"), ...)
Réalise des échantillonnages aléatoires
dans les fichiers de l’hdfs.
On peut y définir un effectif cible ou une
probabilité d’échantillonnage.
equijoin(…)
Permet de réaliser des jointures en
MapReduce (cf. exemple)
45. BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 45
1. Zouheir Guédri
Congrès BigData Paris. (2012)
2. Alex Popescu
Big data causes concern and big confusion. A big data definition to help
clarify the confusion. (2012)
3. Stephane Fermigier
Big data & open source : une convergence inévitable ? (2012)
4. Semiocast
Twitter reaches half a billion accounts - More than 140 millions in the U.S.
(2012)
5. R development core team
R : A language and environment for statistical computing. (2008) (3-900051-
07-0)
6. Michael Eisermann
1. Comment fonctionne Google ? (2009)