WOW !! MUCH LOVE ! SO WORLD PEACE !
Fond bitcoin pour l'amélioration du site: 1memzGeKS7CB3ECNkzSn2qHwxU6NZoJ8o
  Dogecoin (tips/pourboires): DCLoo9Dd4qECqpMLurdgGnaoqbftj16Nvp


Home | Publier un mémoire | Une page au hasard

 > 

Stratégies d'optimisation de requêtes SQL dans un écosystème Hadoop

( Télécharger le fichier original )
par Sébastien Frackowiak
Université de Technologie de COmpiègne - Master 2 2017
  

précédent sommaire suivant

Extinction Rebellion

4.2.2 Explication d'une projection avec une restriction

Complexifions légèrement notre requête en lui appliquant une restriction puis expliquons-la :

EXPLAIN EXTENDED

SELECT field1 FROM z_database1.table1

WHERE field1="123";

Le résultat de cet « EXPLAIN EXTENDED » est :

ABSTRACT SYNTAX TREE:

TOK_QUERY

TOK_FROM

TOK_TABREF

TOK_TABNAME

z_database1

table1

TOK_INSERT

TOK_DESTINATION

TOK_DIR

TOK_TMP_FILE

TOK_SELECT

TOK_SELEXPR

TOK_TABLE_OR_COL

field1

TOK_WHERE

=

TOK_TABLE_OR_COL

field1

"123"

STAGE DEPENDENCIES:

Stage-1 is a root stage

Stage-0 depends on stages: Stage-1

STAGE PLANS:

Stage: Stage-1

Map Reduce

Map Operator Tree:

TableScan

alias: table1

filterExpr: (field1 = '123') (type: boolean)

Statistics:

...

GatherStats: false

Filter Operator

isSamplingPred: false

predicate: (field1 = '123') (type: boolean)

Statistics:

...

Select Operator

expressions: field1 (type: varchar(10))

outputColumnNames: _col0

Statistics:

...

File Output Operator

compressed: true

GlobalTableId: 0

directory:

hdfs://NAMENODE/tmp/hive/u_xxxx_yyy/.../-ext-10001

NumFilesPerFileSink: 1

Statistics:

...

Stats Publishing Key Prefix:

hdfs://NAMENODE/tmp/hive/u_xxxx_yyy/.../-ext-10001/

table:

input format:

org.apache.hadoop.mapred.TextInputFormat

output format:

org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat

...

TotalFiles: 1

GatherStats: false

MultiFileSpray: false

Path -> Alias:

hdfs://NAMENODE/.../z_database1.db/table1 [table1]

Path -> Partition:

hdfs://NAMENODE/.../z_database1.db/table1

Partition

base file name: table1

input format:

org.apache.hadoop.hive.ql.io.orc.OrcInputFormat

output format:

org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat

properties:

...

Stage: Stage-0

Fetch Operator

limit: -1

Processor Tree:

ListSink

Explications :

Le résultat de cet « EXPLAIN EXTENDED » contient les 3 mêmes parties.

· (1) L'arbre syntaxique abstrait

Nous remarquons qu'il contient un nouveau token « TOK_WHERE » définissant notre restriction, nous avons en effet à présent :

- TOK_QUERY : la racine de l'arbre

o TOK_FROM : la base et la table interrogées

o TOK_INSERT : la destination du résultat dans un fichier temporaire

o TOK_SELECT : les champs sélectionnés

o TOK_WHERE : la restriction opérée sur un champ

· (2) Les dépendances entre étapes

Dans notre exemple, le plan de dépendance est devenu plus complexe puisqu'il figure à présent deux étapes :

- Stage-1: l'étaperacine

- Stage-0 : une étape dépendant de l'étape racine

· (3) Le plan d'étapes

Dans notre exemple :

- Stage-0 :

o est de type « Map Reduce »

o contient un arbre de traitements « Map Operator Tree » décrivant une séquence de traitements :

§ TableScanFilter OperatorSelect OperatorFile Output Operator

Où :

Ø TableScan : « balaye » la table ligne par ligne

Ø Filter Operator : filtre la ligne parcourue

Ø Select Operator : projette le champ sélectionné

Ø File Output Operator : définit la table temporaire qui contiendra le résultat et notamment son emplacement physique sur HDFS, ainsi que ses statistiques

Voici un schéma décrivant cette étape :

Figure 7 : diagramme de traitement du parcours d'une table avec projection et restriction

- Stage-1 :

o est de type « Fetch Operator »

o contient un arbre de traitements « Processor Tree » réalisant un unique traitement :

§ ListSink

Où :

Ø ListSink : transmet les données du fichier temporaire à l' « executor »

Résumons :

- Le Stage-0 est chargé de construire une table temporaire, réalisant la projection et la restriction d'une table (phase Map).

- Le Stage-1 est chargé de transférer les données de la table temporaire à l' « executor » de Hive qui se chargera de les acheminer au client qui aura effectué la requête.Dans cette étape, l'absence de « TableScan » provient du fait qu'il n'y plus aucune opération à réaliser (ni projection, ni restriction), mis à part le transfert.

Figure 8 : processus de traitement MapReduce d'une requête avec projection et restriction

Un tel fonctionnement est appelé « Map-Only Job ». Sa particularité est de ne faire appel qu'à une phase Map, épargnant ainsi notamment les étapes « Partition & Sort » et « Shuffle & Merge & Sort » préalables à la phase Reduce. C'est un procédé qui permet dans tous les cas de figure de réaliser un traitement avec le maximum de distribution sans avoir à agréger les données sur un ensemble de Reducers.

Notons enfin, les sections « Path Alias » et « Path Partition » qui s'ajoutent et qui donnent un ensemble d'informations relatives à la table utilisée dans notre requête :

· Path Alias : l'emplacement physique de la table dans HDFS

· Path Partition : l'emplacement physique de la partition dans HDFS(le rôle d'une partition sera expliqué dans le prochain chapitre)

o input / output format : le format de la table

o properties

§ columns : la liste des champs de la table

§ columns.types : le type de chaque champ de la table

o numFiles : la quantité de fichiers utilisés par la table

o numRows : le nombre de lignes contenues par la table

o rawDataSize : la taille brute de la table (non compressée)

o totalSize : la taille réelle de la table (compressée)

précédent sommaire suivant






Extinction Rebellion





Changeons ce systeme injuste, Soyez votre propre syndic





"Piètre disciple, qui ne surpasse pas son maitre !"   Léonard de Vinci