Vous êtes sur la page 1sur 70

Pr.

ROCHD
Professeur de l'Enseignement Supérieur - Chercheur
Département Mathématiques & Informatique
INTRODUCTION
Aujourd’hui, on entend beaucoup parler des technologies
Big Data :
les chefs de projets en parlent et souhaitent expérimenter
l’apport de ces technologies en termes de scalabilité, les
commerciaux parlent de missions Big Data et de DataLab
chez les clients, les RH cherchent des experts Big Data et
des développeurs Hadoop qu’ils n’arrivent pas facilement à
trouver.
Frameworks Big Data
 Un nombre très important de frameworks Big Data a
vu le jour ces dernières années et l’écosystème Big Data
est en pleine effervescence. Cependant, compte tenu
du manque de maturité de son écosystème, plusieurs
frameworks disparaissent à cause de leur complexité
ou non adéquation avec les nouveaux besoins.
Apache Hive
 Nous allons, introduire Apache Hive, un framework
Big Data pour l’analyse des données.
 Son utilité : proposer une abstraction en dessus de
MapReduce pour faciliter l’analyse de gros volumes de
données.
 Ses atouts : de nombreux projets en production, une
communauté active et un rythme de release assurant la
compatibilité avec les nouvelles versions de Hadoop.
Définition
 Initialement développé par Facebook, Apache Hive est un
système d'entrepôt de données open source qui permet
d'interroger et analyser de grands ensembles de données stockées
sur Hadoop.

 Le projet permet aux développeurs d'écrire des requêtes, dans un


langage proche de SQL appelé HiveQL, qui sont ensuite traduites
comme des programmes MapReduce sur le cluster. L'avantage est
de pouvoir fournir un langage que les développeurs connaissent
pour l'écriture des programmes MapReduce.

Hive peut être utilisé sur MapReduce ou Spark et il est mieux
adapté pour la préparation de données par lots ou pour une
utilisation en tant qu'ETL.
C’est quoi, HIVE ?

 Il s’agit d’un système qui maintient des métadonnées


décrivant les données stockées dans HDFS.
 Il utilise une base de données relationnelle appelée
metastore (Derby par défaut) pour assurer la
persistance des métadonnées.
 Ainsi, une table dans Hive est composée
essentiellement :
 D’un schéma stocké dans le metastore,
 De données stockées dans HDFS.
C’est quoi, HIVE ?

 Apache Hive est un datawarehouse pour Hadoop. Il a


été créé par Facebook pour devenir par la suite un
projet Apache open source. Il ne s’agit pas d’une
base de données relationnelle ni d’un datawarehouse
classique.
C’est quoi, HIVE ?

 Avec les données du metastore, Hive permet de


manipuler les données comme si elles étaient
persistées dans des tables (au sens d’un système de
gestion de base de données classique) et de les
interroger avec son langage HiveQL.
C’est quoi, HIVE ?

 Hive permet de convertir les requêtes HiveQL en


jobs MapReduce ou Tez (à partir de la version 0.13 de
Hive, une requête HiveQL peut être traduite en un job
exécutable sur Apache Tez, qui est un framework
d’exécution sur Hadoop pouvant remplacer
MapReduce).
Constituants HIVE
Metastore
 le Metastore : le Metastore dans Hive est un référentiel de métadonnées pour
les tables et partitions Hive. Il s'agit d'une base de données relationnelle dans
laquelle sont stockées les informations comme le schéma et l'emplacement des
tables.
 Ainsi, lorsqu'on crée une table Hive, les informations de définition de la table
telles que les noms de colonne, les types de données et les commentaires sont
automatiquement stockées dans le Metastore. Le Metastore comprend
également les sérialiseurs et désérialiseurs (également appelés SerDe)
nécessaires pour lire et écrire des données et les fichiers HDFS correspondants
où les données sont stockées.
 Il agit comme un référentiel de schémas central qui peut être utilisé par les
clients Hive et d'autres services comme Spark. Les métadonnées stockées dans
le Metastore aident également le pilote de Hive à garder une trace des données
distribuées sur le cluster ;
le pilote
 le pilote : c'est le composant qui reçoit les requêtes ou
instructions HiveQL. Lorsqu'il les reçoit, le pilote
démarre l'exécution des requêtes en créant des
sessions, il surveille également le cycle de vie et
l'avancement de l'exécution des requêtes ;
le compilateur
 le compilateur : il effectue la compilation de la
requête HiveQL. Cela convertit la requête en un plan
d'exécution. Le plan contient les tâches ainsi que les
étapes que MapReduce doit effectuer pour obtenir la
sortie telle que traduite par la requête ;
l'optimiseur
 l'optimiseur : il effectue diverses transformations sur
le plan d'exécution pour de meilleures performances
des requêtes HiveQL ;
Moteur d'exécution
 le moteur d'exécution : une fois la compilation et
l'optimisation terminées, c'est ce composant qui
exécute les tâches telles que définies dans le plan
d'exécution ;
les interfaces Hive
 les interfaces Hive : il s'agit notamment de la CLI,
l'interface web Hive (HWI) et Hive Server. L'interface de
ligne de commande (CLI) est le moyen par défaut d'accéder
aux requêtes et commandes Hive.
 Hive Web Interface (HWI) est une alternative à la CLI pour
l'exécution de commandes et requêtes Hive. C'est une
interface utilisateur graphique simple qui offre un excellent
moyen de démarrer avec Hive. Quant à Hive Server (parfois
appelé serveur Thrift), il permet d'exécuter Hive à partir de
clients distants écrits dans différents langages. Hive étant
écrit en Java, l'interface Thrift agit comme un pont,
permettant à d'autres langages d'accéder à Hive, en
utilisant un serveur Thrift qui interagit avec le client Java.
Ainsi, des profils familiers avec SQL (analystes, data
scientists, etc.) n’ayant pas un background
de développeur pourront écrire leurs requêtes HiveQL
pour exploiter les données stockées dans HDFS sans se
soucier de la partie programmatique de jobs.
Clauses SQL standards supportées
par HiveQL
 D’un point de vue syntaxe, Hive supporte les clauses SQL
standards (cf. Fig 1) ainsi que les commandes de définition
de structure (DDL – cf. Fig 2).
 INSERT INTO
 SELECT
 FROM … JOIN …. ON
 WHERE
 GROUP BY
 HAVING
 ORDER BY
 LIMIT
Commandes de définition de
structure avec HiveQL
 CREATE / ALTER / DROP TABLE / DATABASE
 D’un point de vue performance, Hive n’est
certainement pas conçu dans une vision
d’amélioration des performances d’exécution des jobs.

 En effet, les requêtes HiveQL (et donc job MapReduce


ou Tez derrière) ne sont pas exécutées en temps réel et
peuvent prendre quelques minutes ou quelques heures
pour être exécutées.
Hive Mapreduce

Ainsi, l’avantage principal de Hive reste sa


capacité d’abstraction par rapport à MapReduce.
Architecture de HIVE

 Pour illustrer le fonctionnement de Hive et son


architecture, nous allons décortiquer l’exécution
d’une requête Hive.
 En effet, l’interaction Hive/Hadoop s’effectue selon les
trois étapes suivantes :
 Envoi de la requête HiveQL : en utilisant un client
Hive (le client shell, un client JDBC/ODBC ou une
interface web), la requête est envoyée au serveur Hive,
 Planification de la requête : la requête est reçue par
le driver (pilote). Elle est compilée, optimisée et
planifiée comme un job,
 Exécution du job : le job est exécuté sur le cluster
Hadoop.
Partie (1) : la partie client

 Il est possible de soumettre des requêtes au serveur


Hive de différentes manières. En utilisant :
 Le client Hive CLI (Hive Commande Line Interface) qui
permet d’entrer des commandes directement depuis le
shell hive ou d’exécuter un ensemble de commandes Hive
écrites dans un fichier texte. Ce client n’est pas compatible
avec la nouvelle version de Hive (HiveServer2) et a été
remplacé par Beeline qui est le nouveau client en mode
ligne de commande de Hive. Il communique
avec HiveServer2 via thrift,
 Le client JDBC/ODBC,
 Le client web.
Partie (2) : la partie serveur

 Appelé HiveServer2 qui succède à HiveServer. Il s’agit du


conteneur du moteur d’exécution de Hive et appelé
couramment pilote (ou driver). Il se compose du
metastore, du compilateur et de l’exécuteur.
 HiveServer2 assure deux nouvelles fonctionnalités : la
gestion de l’authentification client et la gestion des
requêtes concurrentes.
 Pour chaque connexion client, HiveServer2 crée un
nouveau contexte d’exécution (connexion + session). La
nouvelle interface RPC de HiveServer2 permet au serveur
d’associer le contexte d’exécution Hive avec le thread qui
sert la requête client. Cette interface implémente un service
thrift pour communiquer avec les clients et exécuter leurs
requêtes.
Partie (3) : Hadoop

 Correspond à l’exécution du job sur le cluster


Hadoop.
 Tables, partitions et requêtes dans Hive
 Tables et chargement des données dans Hive
 Une table dans Hive permet d’associer une
structure à des données non structurées dans
HDFS. La création d’une table dans Hive est similaire à
la création d’une table dans un RDBMS et s’effectue
avec la commande CREATE TABLE.
Table HIVE

 Il existe dans Hive deux types de tables :


 1) Managed table,
 2) External table.
Managed table
External table

 Dans Hive, une Managed table est similaire à une table


au sens RDBMS. La différence entre une Managed
table et une External table est la gestion des
données lorsque la table est supprimée.
 En effet, la suppression d’une Managed table entraîne
la suppression des métadonnées ainsi que les données
dans HDFS.
 En revanche, la suppression d’une External table
entraîne uniquement la suppression des
métadonnées. C’est bien pratique, une External table
est un moyen de protéger les données contre les
commandes drop accidentelles.
 hive > CREATE TABLE product (productId
INT,productName STRING,productCategory
STRING,valuationDate TIMESTAMP,validTillDate
TIMESTAMP) ROW FORMAT DELIMITED
FIELDS TERMINATED BY ‘,’ ;
 Figure 4 : Commande HiveQL pour la création d’une managed table product
ayant 5 colonnes (productId, productName, productCategory, valuationDate,
validTillDate
Chargement des données dans
une table Hive
 Un des points forts de Hive réside en sa capacité
d’associer des métadonnées aux données. La
source de ces données peut être le système de fichiers
ou HDFS. Pour cela, il faut utiliser la commande
LOAD DATA. Comment ce chargement s’effectue ?
 Réellement, les données ne sont pas chargées mais
déplacées (comme s’il s’agit d’un mv sous Linux).
 Pour une Managed table : les données sont
déplacées dans un sous répertoire de
/apps/hive/warehouse qui est le répertoire racine par
défaut (cf. Fig 6). Le mot clé LOCAL signifie que le
fichier d’entrée est dans le système de fichiers local. Si
LOCAL est omis, il s’agit d’un fichier d’input dans
HDFS.
 Le mot clé OVERWRITE signifie que les données (si
elles existent) dans la table product seront supprimées.
Si OVERWRITE est omis, les données seront ajoutées
(mode append) aux données existantes.
 hive> LOAD DATA LOCAL INPATH
'/tmp/product.txt' OVERWRITE INTO TABLE product
;

 Figure 6 : Commande HiveQL pour charger les données depuis un fichier


d’entrée dans le système de fichiers dans la table product avec écrasement des
données existantes
 hive> LOAD DATA INPATH '/user/training/product-
ext.txt' INTO TABLE product-ext ;

 Figure 7 : Commande HQL pour charger les données depuis HDFS dans
la table product-ext
Gestion des partitions

 Partitionner une table dans Hive implique une


séparation des fichiers selon la colonne (ou les
colonnes) définissant la clé de partition.
 Le partitionnement peut améliorer les
performances des requêtes HiveQL puisque les
fichiers dans HDFS sont déjà séparés en se basant sur
la valeur de la colonne. Cette séparation peut réduire
le nombre de mappers et réduire ainsi le nombre des
opérations de shuffle/sort du job résultant. La
définition d’une partition est similaire à sa définition
en SQL :
 CREATE TABLE product_partitioned (productId
INT,productName STRING,valuationDate
TIMESTAMP,validTillDate TIMESTAMP) partitioned
by (productType STRING) ;
 Figure 8 : Commande HiveQL pour la création d’une table product partitionnée
par le champ productType
Concepts d’organisation des
données dans Hive
 Le partionnement
 Hive peut organiser les tables en partitions pour
regrouper le même type de données en fonction d’une
colonne (ou d’une clé de partition). Chaque table peut
avoir une ou plusieurs clés de partition pour identifier
une partition particulière. En utilisant le
partitionnement, Hive permet d’accélérer les requêtes
sur des tranches de données.
 L’inconvénient d’avoir trop de partitions est le grand
nombre de fichiers et de répertoires Hadoop créés
inutilement. Ces derniers peuvent surcharger le
NameNode qui doit conserver toutes les métadonnées
du système de fichiers en mémoire.
Les Buckets

 Pour pallier le problème de sur-partitionnement, Hive


a introduit le concept de Bucketing. Il s’agit d’une
technique d’organisation des données en parties plus
petites appelées ‘‘buckets’’. Dans ce concept, la table
possède une structure spécifique basée sur une
fonction de hachage qui s’applique sur une colonne
donnée. Ceci impose aussi la façon avec laquelle les
fichiers sous-jacents sont stockés. En effet, les données
ayant la même bucket-colonne seront toujours dans le
même bucket (cf. Figure 2).
 Physiquement, chaque bucket correspond à un fichier
dans le répertoire de la table. Le bucketing peut être
effectué sur des tables partitionnées ou non
partitionnées. Il permet de créer une distribution
homogène de fichiers en termes de taille.
 Le bucketing peut servir comme technique
d’optimisation de requêtes. En effet, il permet de faire
des jointures efficaces lorsque la clé de jointure
correspond à la colonne de clustering. Il permet aussi
de rendre plus efficace l’échantillonnage de données
puisqu’il s’agit de manipuler des ensembles de données
plus petits.
Les buckets sont créés en utilisant le mot clé
CLUSTERED BY. Par exemple, la syntaxe ci-dessous
permet de créer une table product_bucketed avec 24
buckets en se basant sur la colonne id comme colonne
de clustering (cf. Figure 3).
Figure 3: Commande HiveQL pour la
création d’une table product_bucketed
divisée en 24 buckets.
Voici ce que nous pouvons retenir :
 Une table dans Hive peut être partionnée et organisée
en buckets.
 Une partition correspond à un répertoire alors qu’un
un bucket correspond à un fichier.
 Le sur-partionnement peut générer un volume
important de métadonnées ce qui peut surcharger le
namenode et affecter la performance des requêtes.
Les clauses de tri et de distribution

 Le tri:
 Le tri de données s’effectue dans Hive avec l’une des
deux clauses : ORDER BY et SORT BY. La syntaxe des
deux clauses est similaire (cf. Figure 5). Cependant,
leur fonctionnement est différent :
 ORDER BY
 Elle assure un ordre complet, toutes les données sont
envoyées à un seul reducer sur lequel l’opération de tri
sera réalisée. Son inconvénient : non scalable sur de
gros datasets. Pour cette raison, il est recommandé
d’ajouter la clause LIMIT dans la requête. Ceci est
indispensable pour limiter la taille de données en
sortie afin de permettre le traitement par un seul
reducer.
 SORT BY
 Elle assure un ordre partiel en effectuant un tri au
niveau de chaque reducer.
Donc, la clause ORDER BY est utilisable dans des
environnements de développement et de prototypage
mais fortement déconseillée en production puisqu’elle
est non scalable sur des grands volumes de données.
Figure 5: Syntaxe de ORDER BY / SORT BY
Gestion et optimisation de la
distribution:
 Il est possible dans Hive d’optimiser la distribution de
données sur l’ensemble des reducers (quand leur
nombre est >1). Ceci est fait en utilisant le mot clé
‘‘DISTRIBUTE BY’’. Dans notre exemple avec le code
pays, les données avec le même pays d’origine vont être
traitées par le même reducer (Cf. Figure 6).
Cependant, cette clause ne garantit aucune forme de
clustering : les données seront renvoyées au même
reducer mais peuvent être non adjacentes. Pour les
grouper et forcer les données à être adjacentes, il faut
ajouter une clause SORT BY.
Figure 6 : Exemple d’utilisation de DISTRIBUTE BY
Conclusion

 Nous avons introduit à travers cet article Apache Hive,


son architecture et son langage de requête HiveQL qui
est très similaire à SQL.
 Ce framework apporte une grande facilité pour
l’interrogation des données stockées dans HDFS en
faisant une abstraction par rapport à MapReduce.
Grâce à HiveQL, l’analyse des gros volumes de données
devient aussi simple que le requêtage d’une base de
données relationnelle avec SQL.
 Les avantages de Hive par rapport aux autres
frameworks d’analyse de données Big Data sont
principalement : sa maturité, la communauté active
qui l’utilise, ainsi que sa compatibilité avec les
nouvelles versions de Hadoop.
 Hive propose d’autres fonctionnalités plus avancées
comme le tri et les jointures (plusieurs types de
jointures comme le Shuffle Join, le Broadcast Join et le
SMB Join sont définies dans Hive). Hive est aussi
flexible grâce aux UDF (User Defined Function) qui
sont des fonctions définies par l’utilisateur permettant
d’étendre le langage et pouvant être ré-utilisées comme
s’il s’agissait d’une bibliothèque externe.
TP
TP (suite)
TP (suite)
TP Table Externe

Vous aimerez peut-être aussi