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

Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy

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






Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy








"Il existe une chose plus puissante que toutes les armées du monde, c'est une idée dont l'heure est venue"   Victor Hugo