Introduction à Apache Hive dans Hadoop
Introduction à Apache Hive dans Hadoop
Pr. N. EL FADDOULI
nfaddouli@[Link]
2024-2025
CC-BY NC SA
PLAN
q INTRODUCTION
q MAPRREDUCE/YARN
q PIG
q HIVE
q HBASE
q SQOOP
3
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
1
25/03/2025
Apache HIVE
140
Hive: Introduction
• Hive est un projet né au sein de Facebook et repris par la fondation Apache.
• Apache Hive représente une surcouche analytique à Hadoop
• Il représente aussi une couche d’abstraction aux données HDFS sous forme
d’un modèle tabulaire (lignes, colonnes)
• Hive permet de traiter des données structurées (fichiers) dans Hadoop.
• Il est utilisé par différentes entreprises, par exemple, Amazon l'utilise dans
Amazon Elastic MapReduce (outil AWS de traitement et d'analyse de données)
• Il a un langage de requête HiveQL ou HQL proche de SQL (sélection, jointure,
agrégation, union, sous-requêtes,…)
• La principale différence entre HiveQL et SQL est qu'une requête Hive s'exécute
sur Hadoop plutôt que sur une BD relationnelle.
• Hive prend en charge les fonctions et procédures java/scala définies par
l'utilisateur (UDF) pour étendre ses fonctionnalités.
141
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
141
2
25/03/2025
Hive: Introduction
• Une requête HiveQL est transformée en une série de jobs MapReduce
exécutés sur le cluster Hadoop afin de récupérer un jeu de résultat tabulaire.
• HiveQL décharge l'utilisateur de la complexité de la programmation
MapReduce. Il réutilise les concepts familiers de BD relationnelle (tables,
lignes, colonnes, schémas, etc) pour faciliter l'apprentissage.
• Hive supporte plusieurs formats de fichiers: TEXTFILE,
SEQUENCEFILE, ORC, RCFILE (Record Columnar File), PARQUET,
…etc.
• Les schémas de BDs sont gérés par le MetaStore qui englobe un service qui
permet aux clients (applications clientes) d'avoir les métadonnées des tables
déclarées dans Hive.
• Le metastore persiste ces métadonnées par défaut dans une BD Apache
Derby (SGBD développé en Java).
142
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
142
Hive: Architecture
[Link]
• Clients Hive: Hive supporte toute application (C++, Java, Python, …) utilisant JDBC,
Thrift ou ODBC drivers.
• Services Hive: Cette couche gère les interactions avec l'utilisateur via :
- Une interface de commandes en ligne (CLI): C'est le shell Hive
- Une interface web de Hive, dans Cloudera Quickstart: Hue (Hadoop User Experience )
- Hive Server lorsqu'il s'agit d'applications (JDBC, ODBC ou Thrift).
143
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
143
3
25/03/2025
Hive: Architecture
144
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
144
Hive: Architecture
145
4
25/03/2025
5. Le compilateur (+optimiseur) crée le plan d'exécution (sous forme d’un DAG(Directed Acyclic
Graph) où chaque arc représente un job map/reduce job, une opération sur HDFS ou une opération
sur les metadonnées) et le convertit en une série de jobs MapReduce qu'il envoie au Driver.
6. Le Driver envoie série de jobs MapReduce au Moteur d'exécution qui va les exécuter sur
le cluster. Les résultats seront stockés dans HDFS.
7. Le Moteur d'exécution interagit avec le MetaStore lorsqu'il s'agit d'une requête DDL
8-9. L'application cliente récupère les résultats depuis le Driver. Le moteur d'exécution
communique avec les Data Nodes (via le NameNode) afin d'avoir les résultats qu'il passera
ensuite à l'application cliente.
146
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
146
Hive: Configuration
• Les paramètres de configuration de Hive sont dans le fichier [Link]
(/etc/hive/conf/[Link]), par exemple:
Chaîne de connexion JDBC à la BD du Metastore
HiveServer/ Driver communique avec le Metastore Service distant via l'API Thrift
147
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
147
5
25/03/2025
148
149
6
25/03/2025
150
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
150
151
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
151
7
25/03/2025
152
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
152
153
8
25/03/2025
154
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
154
• Chaque table est mappée sur un répertoire qui se trouve par défaut sous /user/hive/warehouse
dans HDFS. Par exemples:
• Ce type de table s'appelle une table interne ou une table gérée (Managed Table)
• Lorsque les données (fichiers) sont déjà stockées dans HDFS, une table externe peut être créée
pour décrire ces données (pointer sur ces données).
• Lorsqu'une table interne est supprimée, ses données et ses métadonnées sont supprimées
ensemble.
• Lorsque la table externe est supprimée, seules ses métadonnées sont supprimées. Les données
ne sont pas supprimées. Ceci est très utile lorsque ces données sont partagées avec d'autre
outils (Pig, …).
155
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
155
9
25/03/2025
156
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
156
157
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
157
10
25/03/2025
158
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
158
159
11
25/03/2025
……………………….
…………………….....
160
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
160
Exemple:
N.b: On peut copier (hdfs dfs –cp ) le fichier [Link] directement dans le dossier de la
table /user/warehouse/emsi19/empl
Exemple: INSERT OVERWRITE TABLE temp1 SELECT year, t FROM temperature WHERE C=1
; 161
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
161
12
25/03/2025
162
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
162
Shell Hive
LOAD DATA LOCAL INPATH '/home/cloudera/tp/hive/[Link]' INTO TABLE empl;
163
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
163
13
25/03/2025
Hive: Atelier 1
1. Dans un terminal, lancer la commande: hive
2. Créer la BD analyse: hive> CREATE DATABASE analyse
3. Lister le contenu du dossier HDFS : /user/hive/warehouse
4. Utiliser de la BD analyse : hive> Use analyse
5. Créer la table vol1 (year, month, day, fl, dep, arr, distance)
hive> CREATE TABLE vol1
( year INT, month INT, day INT, fl STRING, dep STRING, arr STRING, distance INT )
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\;'
STORED AS TEXTFILE;
6. Afficher la liste des tables de la BD courante.
7. Consulter le Metastore pour avoir le schéma de la table vol1: hive> DESCRIBE vol1 ;
8. Charger le fichier local [Link] dans la table vol1 en utilisant la commande LOAD
9. Consulter de la table: hive> SELECT year, dep, COUNT(fl)
FROM vol1
GROUP BY dep, year;
N.B: Remarquez les jobs Map-Reduce crées.
164
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
164
Hive: Atelier 1
10. Créer la table externe vol2 (year, month, day, fl, dep, arr, distance) en indiquant son
dossier HDFS de données qu'il faut créer, par exemple: /user/cloudera/hive/data/db
13. Charger le fichier local [Link] dans la table vol2 avec LOAD et sans l'option overwrite.
14. Lister le contenu du dossier HDFS: /user/cloudera/hive/data/db
15. Afficher les métadonnées détaillées de la table vol2.
16. Exécuter séparément les deux requêtes: SELECT * FROM vol2;
SELECT year, dep, COUNT(fl)
FROM vol1
GROUP BY dep, year;
Quelle est la différence entre les deux lors de leur exécution?
165
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
165
14
25/03/2025
Hive: Atelier 1
17. Créer la table interne vol3 (year, month, day, fl, dep, arr, distance).
19. Effectuer une requête HQL (Select ....) sur la table vol2.
Qu'obtient-on? Pourquoi?
20. Lister le contenu du dossier de la table vol2
Comment il est? Pourquoi?
166
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
166
Hive: Gérer les données avec Apache Hue (Hadoop User Experience)
• Interface web donnant accès aux données stockées dans HDFS.
• Hue est configuré pour répondre sur le port 8888.
• Hue permet de visualiser l’arborescence HDFS et le metastore de Hive.
• L'URL sur la VM Cloudera: [Link]
• Login/mot de passe = cloudera/cloudera
• Le raccourci / Files permet de visualiser l’arborescence HDFS
167
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
167
15
25/03/2025
Hive: Gérer les données avec Apache Hue (Hadoop User Experience)
• L'éditeur Hive est accéssible via l'URL: [Link]
• Cliquer sur le lien (à gauche de l'interface Hue) plusieurs fois jusqu'à
avoir Sources
• Cliquer sur Hive pour avoir accès aux BD déjà créées.
• Cliquer sur la BD analyse pour avoir ses tables
• Cliquer sur le raccourci + pour créer une nouvelle table.
• Remplir les champs comme suit puis cliquer sur Next:
168
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
168
Hive: Gérer les données avec Apache Hue (Hadoop User Experience)
• Remplir les champs comme suit
Name: [Link]
Format: Text
Fields: year:int , month:int, day:int, flight:string, depart:string,
destination:string, distance:int
• Cliquer sur Submit
• Les détails de la table créée seront affichés:
• Choisir: Query / Editor / Hive
• Saisir la requête suivante puis cliquer sur le petit triangle bleu pour l'exécuter:
169
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
169
16
25/03/2025
170
• Les fichiers plats ou texte doivent être structurés et traités sous forme de
champs (attributs):
Les champs peuvent être à des positions fixées dans des enregistrements
Ou, l'analyse textuelle peut être nécessaire pour extraire le sens.
• Généralement en Big Data, on charge les données dans leur état brut.
171
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
171
17
25/03/2025
172
173
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
173
18
25/03/2025
SequenceFile
• Représentation binaire de pairs clé/valeur
• Orienté ligne (enregistrements)
• Utilisé pour le transfert de données entre les jobs Map et Reduce.
• Permet de spliter les données, pour les job Map, même compressées.
• La lecture de données dans le format SequenceFile est plus performante que
celle des fichiers textes plats (pas besoin de structuration d'enregistrements)
• Ce format a une implémentation uniquement en Java où plusieurs classes
permettent de lire, écrire ou trier.
• Il y a trois choix de compression de fichier SequenceFile:
[Link]: Enregistrements clé/valeur non compressés.
[Link]: Enregistrements clé/valeur compressés: seules les valeurs sont
compressées
[Link]: Bloc d'enregistrements clé/valeur compressés: les clés et les valeurs
sont collectées dans des «blocs» séparément et compressées. La taille du 'bloc'
est configurable par [Link] dans [Link] (valeur
par défaut: 1000000 Octets)
174
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
174
Avro
• Le format Avro permet de stocker les fichiers sous format binaire
permettant l'interopérabilité d'applications écrites en différents langages de
programmation àAvro est indépendant des langages de programmations.
• Avro est orienté ligne (enregistrement) dont le schéma est codé en JSON
dans le fichier lui-même.
• Les blocs de fichiers Avro peuvent être compressés et splitables.
175
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
175
19
25/03/2025
176
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
176
177
20
25/03/2025
Parquet
• Apache Parquet est un format de stockage en colonnes compressées (développé par
Cloudera et Twitter)
• Il a les mêmes caractéristiques que ORC:
q Groupement de lignes avec un stockage et compression par colonne
q Supporte les évolutions de schéma.
• Il est compatible avec toutes les interfaces MapReduce comme Java, Hive, Pig et d’autres
moteurs d’exécution comme Impala ou Spark.
• Parquet supporte des structures de données complexes ainsi que la lecture et l’écriture par les
APIs d’Avro.
• Fournit l'un des meilleurs résultats dans divers tests de performance de référence
• Le stockage en colonnes offre les avantages suivants:
ola compression est plus efficace car les données de colonne sont du même type.
oLe traitement des requêtes est plus efficace car les colonnes sont stockées ensemble.
178
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
178
179
21
25/03/2025
180
OUTPUTFORMAT '[Link]'
LOCATION '/user/cloudera/hive_lab/data/db_avro'
TBLPROPERTIES ('[Link]'='/user/cloudera/hive_lab/schema_avro/[Link]') ;
181
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
181
22
25/03/2025
STORED AS AVRO
LOCATION 'hdfs_directory' ;
• Importation de données dans une table au format Avro à partir d'une autre table:
→ Un fichier binaire sera créé dans le dossier de données de la table dont le schéma sera stockée
en format JSON dans l'entête du fichier.
182
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
182
183
23
25/03/2025
Hive: Atelier 2
1. Créer les dossiers HDFS suivants:
/user/cloudera/hive_lab/data/bank_txt
/user/cloudera/hive_lab/data/bank_avro
/user/cloudera/hive_lab/data/bank_parquet
N.B: Utiliser mkdir avec l'option p pour créer tous les dossiers avec une seule commande
hdfs dfs -mkdir -p /user/cloudera/hive_lab/data/{bank_txt,bank_avro,bank_parquet}
2. Copier le fichier local [Link] dans le dossier HDFS
/user/cloudera/hive_lab/data/bank_txt
3. Créer la table externe bank_txt stockée au format texte et dont:
• les données sont dans le dossier HDFS /user/cloudera/hive_lab/data/bank_txt
• les colonnes contiennent: id client (texte), âge (entier), sexe (texte), région (texte), revenu
(réel), marié (texte), enfants (entier), voiture(texte), hypothèque (texte).
N.B: Visualiser le contenu du fichier CSV pour avoir le type de chaque colonne.
4. Consulter la table créée par une requête HQL.
184
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
184
Hive: Atelier 2
5. Créer la table externe bank_avro stockée au format Avro et dont le dossier de données est
/user/cloudera/hive_lab/data/bank_avro
6. Importer dans la table bank_avro les données de la table bank_txt.
7. Lister ( avec ls) les fichiers du dossier HDFS /user/cloudera/hive_lab/data/bank_avro
8. Afficher ( avec cat ) le contenu des fichiers de /user/cloudera/hive_lab/data/bank_avro
9. Créer la table externe bank_parquet stockée au format Parquet et dont le dossier de
données est /user/cloudera/hive_lab/data/bank_parquet
10. Importer dans la table bank_parquet les données de la table bank_txt.
11. Lister ( avec ls) les fichiers du dossier HDFS /user/cloudera/hive_lab/data/bank_parquet
12. Afficher ( avec cat ) le contenu des fichiers de /user/cloudera/hive_lab/data/bank_parquet
13. Ecrire des requêtes afin d'avoir à partir des trois tables :
a) La moyenne de revenu par région.
b) Le pourcentage des clients mariés et ayant une hypothèque.
c) Le nombre de clients mariés par région et ayant des enfants et une hypothèque
d) Les identifiants des clients ayant le revenu maximal.
185
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
185
24
25/03/2025
186
• La commande SHOW PARTITIONS permet d'avoir la liste des partitions actuelles dans une
table partitionnée. Exemple: SHOW PARTITIONS temperature_partition;
187
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
187
25
25/03/2025
188
• On peut charger des fichiers dans une partition spécifique d'une table partitionnée.
LOAD DATA INPATH '/user/cloudera/data/[Link]' INTO TABLE temperature_partition
Attention à l'ordre des colonnes dans [Link] PARTITION(year=2012);
189
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
189
26
25/03/2025
190
191
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
191
27
25/03/2025
N
.B e
:
n s fi
Le ont s de
le
se hie
s
r r
va pas ces
c
le
ur sto dos
s
de kée iers
Ye s d
c s
ar a
e t ns
C
192
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
192
193
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
193
28
25/03/2025
194
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
194
195
29
25/03/2025
N.B: Si la colonne de bucketing est null, l'enregistrement sera stocké dans le premier bucket
000000_0
• Le bucket de chaque enregistrement est déterminé par :
Hash(val_colonne(s)) MOD Nbre_Buckets
Exemple: Si on a Nbre_Buckets =4, on aura quatre fichiers crées 000000_0 , 000001_0,
000002_0 et 000003_0
196
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
196
• Les paramètres suivants doivent être positionnés dans [Link] ou via le shell Hive:
SET [Link] = 1 ;
197
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
197
30
25/03/2025
Hive: Atelier 3
1. Créer les dossiers HDFS suivants:
/user/cloudera/hive_lab/data/bank_partition
/user/cloudera/hive_lab/data/bank_bucket
/user/cloudera/hive_lab/data/bank_part_bucket
N.B: Utiliser mkdir avec l'option p pour créer tous les dossiers et sous-dossiers avec une seule
commande
hdfs dfs -mkdir -p /user/cloudera/hive_lab/data/{bank_partition,bank_bucked,bank_part_bucket}
2. Créer la table interne temporaire bank_temp stockée au format texte.
CREATE TEMPORARY TABLE bank_temp (id string, age int, sexe string, region
string, revenu double, marie string, enfant int, voiture string, hypotheque string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\;'
STORED AS TEXTFILE;
3. Charger le fichier local [Link] dans la table bank_temp.
Interroger la table bank_temp par une requête HQL
198
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
198
Hive: Atelier 3
4. Créer la table externe bank_partition partitionnée par région et dont le dossier de données
est /user/cloudera/hive_lab/data/bank_partition
5. Créer la table externe bank_bucket ayant deux Buckets par la colonne âge triée dans l'ordre
croissant. Le dossier de données est /user/cloudera/hive_lab/data/bank_bucket
6. Activer le partitionnement et le Bucketing automatique
7. Importer dans les table bank_partition et bank_bucket les données de la table bank_temp.
FROM bank_temp
INSERT OVERWRITE TABLE bank_partition Partition(region) SELECT
id,age,sexe,revenu,marie,enfant,voiture,hypotheque,region
INSERT OVERWRITE TABLE bank_bucket SELECT * ;
199
31
25/03/2025
Hive: Atelier 3
12. Lister (avec ls) le contenu du dossier HDFS /user/cloudera/hive_lab/data/bank_bucket
13. Afficher chacun des deux fichiers de ce dossier.
Y a-t-il une valeur de la colonne âge qui apparaît dans les deux fichiers?
14. Créer la table externe bank_part_bucket partitionnée par région et chaque partition a deux
Buckets par la colonne âge et triés par âge et revenu. Le dossier de données est
/user/cloudera/hive_lab/data/bank_part_bucket
CREATE EXTERNAL TABLE nom_table (……)
PARTIONED BY (….)
CLUSTERED BY (….) SORTED BY (…) INTO … BUCKETS
ROW FORMAT ….
STORED AS …
LOCATION ….;
15. Importer dans le table bank_part_bucket les données de la table bank_temp.
16. Lister (avec ls -R) le contenu du dossier HDFS
/user/cloudera/hive_lab/data/bank_part_bucket
[Link] le contenu de quelques fichiers de données.
200
FONDEMENTS DU BIG DATA \ [Link] FADDOULI CC-BY NC SA
200
32