Vous êtes sur la page 1sur 6

Introduction

Manipulations des données en distribué


– Algèbre Map-Reduce étendue
Requêtes relationnelles dans les • Spécifier des UDF (User defined functions) pour
systèmes Map-Reduce préparation, nettoyage de données brutes
• Traitement ‘’bas niveau’’, optimisation compliquée
– Algèbre relationnelle (Dataframe, SQL)
Master DAC – Bases de Données Large Echelle • Manipulation de données structurées
Mohamed-Amine Baazizi • Langages déclaratifs, techniques d’optimisations
baazizi@ia.lip6.fr
Octobre 2017
connues pour SGBD parallèles

Implantations de SQL en distribué


Implantations de SQL en distribué
: principes
• Native MapReduce • Systèmes dédiés • Native MapReduce
– Hive – Spark SQL
– Génération d’un DAG Map-Reduce
– Facebook Presto – FlinkSQL
– MapR Drill, LinkedIn – IBM BigSQL
Tajo • Hadoop comme data store
– Utilisation de SGBD relationnels (Postgres, mysql)
• Hadoop comme data Remarques :
store • Requêtes analytiques
– Impala seulement (pas de • Systèmes dédiés
– Hadapt transactions) – Génération d’un worklow pour algèbre propre
– Pivotal HAWQ • sous-langages du
standard SQL
3 4
Implantation Native MapReduce Implantation Native MapReduce
• Avantages (ceux de MapReduce)
– Passage à l’échelle, reprise sur panne
• Inconvénients (ceux de MapReduce)
– Coût de la matérialisation entre chaque job
HDFS MR HDFS
read Job 1 write
… HDFS MR HDFS
read Job n write

• Pistes pour l’optimisation


– Réduire le nombre de jobs, gestion efficace des
données intermédiaires, jointures optimisées

5 6

Traduction SQL en MapReduce Traduction opérateurs unaires


• Opérateurs considérés • Projection, sélection
– Unaires : projection, sélection, agrégations – Triviale : UDF du map
– Binaires : produit cartésien, jointure, union,
intersection, différence
– Fonctions d’agrégations de SQL : min, max, …
g(a,b) = if(a>b) then a else b
• Approche naïve • Agrégation
– Associer à chaque opérateur un job correspondant – Si données partitionnées,
– Enchainer les job selon leur dépendance appliquer fonction d’agg.
durant reduce

7 8
Traduction de la jointure Traduction requête complexe
SELECT sum(l_extendedprice) / 7.0 AS avg_yearly
• Jointure par partitionnement FROM (SELECT l_partkey, 0.2* avg(l_quanTty) AS t1
FROM lineitem GROUP BY l_partkey) AS inner,
(SELECT l_partkey,l_quanTty,l_extendedprice
– Map : étiqueter chaque relation, exposer attribut(s) FROM lineitem, part
WHERE p_partkey = l_partkey) AS outer
de jointure comme clé WHERE outer.l_partkey = inner.l_partkey; AND outer.l_quanTty <
inner.t1;
– Reduce : fusionner les valeurs de la même clé
La requête R et son arbre algébrique
John, eng, Paris (eng, John) (eng, John) John, 35K Agg1
Emp Liz, doc, Lyon (doc, Liz) (eng, 35K) Map : lineitemà(l_partkey,l_quanTty)
Ben, music, Paris (music,Ben) Reduce : v = 0.2* avg(l_quanTty)
Liz, 50K Join1
Traduction de R
(doc, Liz) Map : lineitemà(l_partkey, (l_quanTty, l_extendedprice) )
eng, 35K (eng, 35K) (doc, 50K) partà(l_partkey, null) en MapReduce
Reduce : jointure
Sal doc, 50K (doc, 50K) Ben, 20K Join2
music, 20K (music,20K) (music,Ben) Map : innerà(l_partkey,v)
(music,20K) outer à(l_partkey,(l_quanTty , l_extendedprice))
Reduce : jointure
Entrée Map Reduce Agg2 …
Shuffle
9 10

Traduction requête complexe Constat


SELECT sum(l_extendedprice) / 7.0 AS avg_yearly RW HDFS
FROM (SELECT l_partkey, 0.2* avg(l_quanTty) AS t1 • Redondance Agg1
FROM lineitem GROUP BY l_partkey) AS inner, – Lectures Map : lineitemà(l_partkey,l_quanTty)
(SELECT l_partkey,l_quanTty,l_extendedprice RW HDFS RW HDFS Reduce : 0.2* avg =v
FROM lineitem, part Join1
WHERE p_partkey = l_partkey) AS outer
Map : lineitemà(l_partkey, (l_quanTty,
WHERE outer.l_partkey = inner.l_partkey; AND outer.l_quanTty < l_extendedprice) )
inner.t1; – partitionnement initial
partà(l_partkey, null)
La requête R et son arbre algébrique Reduce : jointure

Agg1
Join2
Map : lineitemà(l_partkey,l_quanTty) Map : innerà(l_partkey,v)
Reduce : v = 0.2* avg(l_quanTty) – partitionnement final outer à(l_partkey,(l_quanTty ,
Join1 l_extendedprice))
Map : lineitemà(l_partkey, (l_quanTty, l_extendedprice) )
Traduction de R
partà(l_partkey, null) en MapReduce Reduce : jointure
Reduce : jointure
Agg2 …
Join2
Map : innerà(l_partkey,v)
outer à(l_partkey,(l_quanTty , l_extendedprice))
Coût communication !! La traduction de R
Reduce : jointure
Agg2 …

11 12
Traduction optimisée
• Redondance Agg1
– Lectures Map : lineitemà(l_partkey,l_quanTty)
Agg2 1 seul job à Input correlation (IC) Reduce : 0.2* avg =v
Join Join1
Map : l_extendedprice Map : lineitemà(l_partkey, (l_quanTty,
lineitemà(p_partkey , (l_quanTty l_extendedprice) )
l_extendedprice)) Join 2 partà(l_partkey, null)
– partitionnement initial
partà(l_partkey, null) l_partkey à transit correlation (TC) Reduce : jointure
Reduce : l_partkey
Join2
agg1 sur l_quanTty Agg1 Map : innerà(l_partkey,v)
join1 sur l_partkey = p_partkey
Join 1 outer à(l_partkey,(l_quanTty ,
l_partkey – partitionnement final : l_extendedprice))
join2 sur l_partkey = l_partkey l_partkey p_partkey
à Jobflow correlation (JFC) Reduce : jointure
Agg 2
lineitem lineitem part Agg2 …

La traduction de R

13 14

Traduction optimisée : gain Traduction optimisée : étapes


SQL MRstd MRopGm A. Aplatir l’arbre MRstd : parcours post-order
à séquence de tâches (PS-A-J-S)
Input Partager les Map • Gain local (accès disque) B. Réduire la séquence de tâches en appliquant
correlation • communication si map distant
3+1 règles
Transit Partager Map, • Gain local (accès disque) Phase 1 : appliquer règle 1 jusqu’à plus de tâches IC et TC
correlation mutualiser reduces • communication
Phase 2 : appliquer les règles 2 à 3
Jobflow Mutualiser reduce • Gain local (accès disque)
correlation • communication

Gain

15 16
Règle 1 Règle 2

si IC (J1, J2) et TC (J1, J2) alors Fusionner (J1, J2) si J2 : agrégation, JFC(J1,J2) et J2 parent de J1 alors
Fusionner (J1, J2)

J2

J1
J1 J2
lineitem orders
18

lineitem orders
lineitem orders lineitem lineitem orders

17 18

Règle 3 Exemple
R(A,B) S(B,C) et T(B,D) trois schémas de relations
Q = R S agg(T) agg(S)
si JFC(J3,J1), JFC(J3,J2), TC(J1,J2) et J1<J2<J3
Les corrélations : TC(T1,T4), JFC(T3,T1), JFC(T5,T3), JFC(T5,T4)
alors exécuter J3 pendant reduce de J1,J2 T5 JOIN3

T3 JOIN2
R1
si IC (J1, J2) et TC (J1, J2) alors T4 AGG2
Fusionner (J1, J2)
J3
Si J2 : agrégation, JFC(J1,J2) et T1 JOIN1
R2 J2 parent J1 alors Fusionner (J1, T2 AGG1
J1 J2
J2) S
lineitem orders
19 R3
si JFC(J3,J1), JFC(J3,J2),
TC(J1,J2) et J1<J2<J3 T R S
lineitem orders lineitem 19 alors exécuter J3 pendant reduce
de J1,J2
Résultat : T2, T1435
(2 tâches)
19 20
Exemple Autres techniques d’optimisation
R(A,B) S(B,C) et T(B,D) trois schémas de relations
• Logiques
Q = R S agg(T) agg(S)
Les corrélations : TC(T1,T4), JFC(T3,T1), JFC(T5,T3), JFC(T5,T4) – Jointures n-aires en une seule tache
T5 JOIN3
– Pousser sélection et projetions
si IC (J1, J2) et TC (J1, J2) alors
R1 Fusionner (J1, J2)
T3 JOIN2
– Réécriture de requêtes avec corrélation
T4 AGG2
R2
Si J2 : agrégation, JFC(J1,J2) et
J2 parent J1 alors Fusionner (J1, • Basées sur le coût
J2) T2 AGG1
si JFC(J3,J1), JFC(J3,J2),
T1 JOIN1
S – Développements en cours
TC(J1,J2) et J1<J2<J3
R3 alors exécuter J3 pendant reduce
de J1,J2
T
R4
si JFC(J3,J1), JFC(J3,J2) et J2<J1 R S
alors fusionner (J1, J3)
Résultat : T14, T2, T35
(3 tâches) 22

Vous aimerez peut-être aussi