Vous êtes sur la page 1sur 35

FACULTE DES SCIENCES AIN CHOCK

UNIVERSITE HASSAN II DE CASABLANCA

Mini- Projet du module


Big Data en Entreprise

APACHE
SQOOP
Réalisé par :
Encadré par :
M. Chiba Zouhair
Kawtar Oukil
Houda Mabrouk

Année 2021-2022
Remerciements
C’était vraiment une besogne fascinante et riche d’événements. Bon nombre de personnes ont
contribué à faire de ce travail mémorable, et c’est le bon moment pour exprimer notre
gratitude à ces personnes.
Tout d’abord, Nous tenons à remercier Dieu le tout puissant qui nous a donné, la force et la
patience d’accomplir ce modeste travail.
Nous exprimons aussi nos sincères remerciements à notre professeur Monsieur Chiba
Zouhair, Professeur Universitaire chez Faculté des sciences Ain Chock.
Nous le remercions pour nous avoir donné cette opportunité afin d’améliorer notre
compétences et d’enrichir notre connaissances, pour ses encouragements et sa générosité en
matière de formation ainsi que pour les conseils prodigués qu’elle nous a apportés tout au
cours de cette semestre.
Aussi, nous exprimons nos vifs remerciements à tous les professeurs des années passées pour
la bonne qualité des informations qui nous ont fournies.

1|Page
Table des matières
Aucune entrée de table des matières n'a été trouvée.

2|Page
Introduction :
Avant l’apparition du Big Data, toutes les données étaient stockées dans des serveurs RDB
dans la structure de base de données relationnelle.
Lorsque le Big Data (plus précisément Hadoop) est apparu et que les développeurs ont
commencé à travailler sur Hadoop qui est une plate-forme ou un framework qui résout les
problèmes de Big Data et des écosystèmes tels que Hive, PIG, etc., ils avaient besoin d’un
système qui puisse les aider à obtenir les données du SGBDR antérieur vers le système
Hadoop et c’est ainsi que Sqoop est entré en scène pour fournir une interaction solide entre le
serveur de base de données relationnelle et le HDFS de Hadoop.
Et c’est la raison pour laquelle, Sqoop est également connu sous le nom de- ‘ « Sqoop : SQL
to Hadoop & Hadoop to SQL  » 

Qu'est-ce qu'Apache Sqoop ?


Sqoop est un outil de l’écosystème Hadoop conçu pour transférer des données entre Hadoop
et des serveurs de bases de données relationnelles tels que MySQL, Oracle RDB, SQLite,
Teradata, Netezza, Postgres, etc. Il est utilisé pour importer des données à partir de bases de
données relationnelles vers Hadoop HDFS et exporter des données de HDFS Hadoop vers
des bases de données relationnelles. Il transfère efficacement des données en masse entre
Hadoop et des magasins de données externes tels que des entrepôts de données d’entreprise,
des bases de données relationnelles, etc. Il est fourni par l’Apache Software Foundation.

Pourquoi Sqoop ?
Pour le développeur Hadoop, le jeu proprement dit démarre après le chargement des données
dans HDFS. Ils jouent avec ces données afin d'obtenir diverses informations cachées dans les
données stockées dans HDFS.
Ainsi, pour cette analyse, les données résidant dans les systèmes de gestion de bases de
données relationnelles doivent être transférées vers HDFS. La tâche d'écrire du code
MapReduce pour importer et exporter des données de la base de données relationnelle vers
HDFS est inintéressante et fastidieuse. C'est là qu'Apache Sqoop vient à la rescousse et
supprime leur douleur. Il automatise le processus d'importation et d'exportation des données.
Sqoop facilite la vie des développeurs en fournissant une CLI pour importer et exporter des
données. Ils n'ont qu'à fournir des informations de base comme l'authentification de la base de
données, la source, la destination, les opérations, etc. Il s'occupe du reste. Sqoop convertit en
interne la commande en tâches MapReduce, qui sont ensuite exécutées sur HDFS. Il utilise le
framework YARN pour importer et exporter les données, ce qui offre une tolérance aux
pannes en plus du parallélisme.

Fonctionnalité de Sqoop :
Il existe de nombreuses fonctionnalités saillantes de Sqoop, qui nous montrent les différentes
raisons d'apprendre sqoop.

● Chargement complet : Apache Sqoop peut charger toute la table par une seule
commande. Vous pouvez également charger toutes les tables d’une base de données à
l’aide d’une seule commande.

3|Page
● Charge incrémentielle : Apache Sqoop offre également la possibilité de
charge incrémentielle où vous pouvez charger des parties de la table
chaque fois qu’elle est mise à jour.

● Importation/exportation parallèle : Sqoop utilise l’infrastructure YARN pour importer


et exporter les données, ce qui offre une tolérance aux pannes en plus du parallélisme.

● Importer les résultats d’une requête SQL : vous pouvez également importer le


résultat renvoyé par une requête SQL dans HDFS

● Compression : vous pouvez compresser vos données à l’aide de l’algorithme deflate


(gzip) avec l’argument –compress ou en spécifiant l’argument –compression-codec.
Vous pouvez également charger une table compressée dans Apache Hive.

● Connecteurs pour toutes les principales bases de données SGBDR : Apache Sqoop


fournit des connecteurs pour plusieurs bases de données SGBDR, couvrant presque
toute la circonférence.

● Intégration de la sécurité Kerberos : Kerberos est un protocole d’authentification de


réseau informatique qui fonctionne sur la base de « tickets » pour permettre aux nœuds
communiquant sur un réseau non sécurisé de prouver leur identité les uns aux autres
de manière sécurisée. Sqoop prend en charge l’authentification Kerberos.

● Charger des données directement dans HIVE/HBase : Vous pouvez charger des


données directement dans Apache Hive pour analyse et également vider vos données
dans HBase, qui est une base de données NoSQL.

● Prise en charge d’Accumulo : vous pouvez également demander à Sqoop d’importer


la table dans Accumulo plutôt qu’un répertoire dans HDFS.

Avantages de Sqoop :
Transfert de données efficace : Sqoop vous permet de transférer rapidement de grandes
quantités de données entre des bases de données relationnelles et des systèmes de fichiers
Hadoop. Il utilise des connexions en parallèle pour accélérer le transfert de données et peut
être configuré pour effectuer des importations et des exportations de données de manière
efficace.
Intégration facile avec d'autres outils : Sqoop est facile à intégrer à d'autres outils et
frameworks de traitement de données, tels qu’Apache Hive et Apache Pig. Cela vous permet
de créer des pipelines de traitement de données efficaces en combinant Sqoop avec d'autres
outils pour automatiser le transfert de données et le traitement des données.
Prise en charge de nombreuses sources et destinations de données : Sqoop prend en
charge un large éventail de sources et de destinations de données, y compris les bases de
données relationnelles courantes (par exemple, MySQL, Oracle et PostgreSQL) et les
systèmes de fichiers Hadoop (par exemple, HDFS et Amazon S3). Cela vous permet de
transférer des données entre de nombreux types de systèmes de manière transparente.
Facile à utiliser : Sqoop est facile à utiliser et possède une interface de ligne de commande
conviviale qui vous permet de configurer et de lancer des transferts de données de manière
simple. Il vous fournit également des outils de journalisation détaillés qui vous permettent de
suivre l'avancement du transfert de données et de détecter d'éventuels problèmes.
4|Page
Open source : Sqoop est un logiciel open source, ce qui signifie qu'il est gratuit à
utiliser et peut être modifié et distribué librement. Cela vous donne accès à une
grande communauté de développeurs et d'utilisateurs qui peuvent vous aider à résoudre les
problèmes et à améliorer l'outil.

Importation de données
Il s’agit du processus dans lequel des tables individuelles sont importées de la base de
données relationnelle vers Hadoop Distributed File System (HDFS). Aux fins du transfert,
la ligne d’une table est considérée comme un enregistrement dans HDFS. Les données
enregistrées sont stockées sous forme de données texte dans des fichiers texte, ou elles sont
stockées dans des fichiers Sequence et Avro en tant que données binaires.

Il est possible de faire de l’importation Sqoop dans Hive. Vous pouvez créer et charger une
partition ou une table avec Hive, tout en important les données. Lorsque cela est fait
manuellement, le type correct de mappage entre les données et les détails doit être effectué. Il
est possible de remplir le metastore Hive avec des métadonnées pour appeler la commande
nécessaire au chargement de la table et au partitionnement.

Sqoop prend également en charge l’importation incrémentielle de données où seules les lignes
nouvelles seront ajoutées à la base de données existante et, si nécessaire, les fichiers peuvent
même être fusionnés sans aucun problème.

Exportation de données
L’exportation Sqoop est utilisée pour transférer des données de HDFS vers un SGBDR.
L’entrée du fichier Sqoop serait les enregistrements considérés comme des lignes dans la
table. Ces données sont numérisées et traitées en enregistrements et utilisées avec le
délimiteur spécifié par l’utilisateur.

L’exportation des données se fait en deux étapes distinctes. La première étape comprend
l’examen de la base de données pour les métadonnées, et la deuxième étape comprend le
transfert des données. Les données Sqoop sont divisées en différentes divisions, puis il y a
l’utilisation des tâches de carte afin de pousser ces divisions dans la base de données.
Parfois, il peut être nécessaire d’utiliser des pipelines Hadoop pour traiter les données dans le
système de production et exécuter les fonctions métier critiques. Sqoop peut également être

5|Page
déployé pour exporter des données dans des banques de données externes, si
nécessaire.
Commandes Sqoop & arguments Courants
Générer du code pour interagir avec les enregistrements de base de
codegen
données
Create-hive- table Importer une définition de table dans Hive
Eval Évaluer une instruction SQL et afficher les résultats
exportation Exporter un répertoire HDFS vers une table de base de données
Aide Liste des commandes disponibles
importation Importer une table d’une base de données vers HDFS
Import-all-tables Importation de tables d’une base de données vers HDFS
liste_bases de
Répertorier les bases de données disponibles sur un serveur
données
tableaux_listes Répertorier les tables disponibles dans une base de données
Version Afficher les informations de version

–connect <jdbc-uri> Spécifier la chaîne de connexion JDBC

-m,–num-mappers <n> Utiliser n tâches cartographiques pour exporter en parallèle


–table <nom_table> Tableau à remplir

Table 1. Job management options


Argument Description
–create <job-id> Define a new saved job with the specified job-id (name). A second Sqoop
–delete <job-id> Delete a saved job.
–exec <job-id> Given a job defined with –create, run the saved job.
–show <job-id> Show the parameters for a saved job.
–list List all saved jobs

Sqoop - Commande IMPORTER


La commande d'importation est utilisée pour importer une table à partir de bases de données
relationnelles vers HDFS. Dans notre cas, nous allons importer des tables de bases de données
MySQL vers HDFS.

6|Page
Comme vous pouvez le voir dans l'image ci-dessous, nous avons créé une base de
données des employés appelle employees et une table des employées appelle employee que
nous importerons dans HDFS.

Nous avons peuplé les données dans la table à l'aide de l'instruction INSERT :

7|Page
8|Page
Nous avons affiché le contenu de la table a l’aide se commande suivant :
Select * from employee;

9|Page
La commande pour importer la table est :
sqoop import --connect jdbc:mysql://localhost/employees --
username training --password training --table employee

Comme vous pouvez le voir dans l'image ci-dessous, après avoir exécuté
cette commande, les tâches de Map seront exécutées à l'arrière.

10 | P a g e
Une fois le code exécuté, vous pouvez vérifier l'interface utilisateur Web de
HDFS, c'est-à-dire localhost:50070 où les données sont importées.

11 | P a g e
Sqoop - Commande IMPORT avec le répertoire cible

Vous pouvez également importer la table dans un répertoire spécifique dans


HDFS à l'aide de la commande ci-dessous :
sqoop import --connect jdbc:mysql://localhost/employees --
username training --table employee --m 1 --target-dir /employee

12 | P a g e
Sqoop importe des données en parallèle à partir de la plupart des sources de bases
de données. La propriété -m est utilisée pour spécifier le nombre de mappeurs à
exécuter.
Vous pouvez spécifier le nombre de tâches de map (processus parallèles) à utiliser pour
effectuer l'importation à l'aide de l’argument -m ou –num-mappers. Chacun de ces arguments
prend une valeur entière qui correspond au degré de parallélisme à employer.
Vous pouvez contrôler le nombre de mappeurs indépendamment du nombre de fichiers
présents dans le répertoire. Les performances à l'exportation dépendent du degré de
parallélisme. Par défaut, Sqoop utilisera quatre tâches en parallèle pour le processus
d'exportation. Cela peut ne pas être optimal, vous devrez expérimenter avec votre propre
configuration particulière. Des tâches supplémentaires peuvent offrir une meilleure
simultanéité, mais si la base de données est déjà bloquée lors de la mise à jour des index, de
l'appel de déclencheurs, etc., une charge supplémentaire peut réduire les performances.

Vous pouvez voir dans l'image ci-dessous que le nombre de tâches de mappage est de 1.

Le nombre de fichiers créés lors de l'importation de tables MySQL est égal au nombre de
mappeurs créés.

Nous avons Archivé  « /employee » si les données sont importées avec succès ou non.

13 | P a g e
Sqoop - Commande IMPORT avec clause Where

Vous pouvez importer un sous-ensemble d'une table à l'aide de la clause 'where' dans l'outil

d'importation Sqoop. Il exécute la requête SQL correspondante dans le serveur de base de

données respectif et stocke le résultat dans un répertoire cible dans HDFS. Vous pouvez

utiliser la commande suivante pour importer des données avec la clause ' where ' :

sqoop import --connect jdbc:mysql://localhost/employees --


username training -–password training --table employee --m 3 --
where "salaire>2100.00" --target-dir /Latest_employee

14 | P a g e
Vous pouvez voir dans l'image ci-dessous que le nombre de tâches de mappage est de 3.

Sqoop - Importation incrémentielle


Sqoop fournit un mode d'importation incrémentiel qui peut être utilisé pour récupérer
uniquement les lignes plus récentes que certains ensembles de lignes précédemment
importés. Sqoop prend en charge deux types d'importations
incrémentielles: « append » et « lastmodified ». Vous pouvez utiliser l'argument «  –
incremental » pour spécifier le type d'importation incrémentielle à effectuer.
Vous devez spécifier le mode d’ajout lors de l'importation d'une table dans laquelle de
nouvelles lignes sont continuellement ajoutées avec des valeurs d'ID de ligne croissantes. 
Vous spécifiez la colonne contenant l'ID de la ligne avec  « –check-column ».
 Sqoop importe les lignes où la colonne check a une valeur supérieure à celle spécifiée
avec « –  last-value ».
Une autre stratégie de mise à jour de table prise en charge par Sqoop est appelée
mode  « lastmodified ». Vous devez l'utiliser lorsque des lignes de la table source peuvent être
mises à jour, et chacune de ces mises à jour définira la valeur d'une colonne modifiée en
dernier sur l'horodatage actuel.
Lors de l'exécution d'une importation ultérieure, vous devez spécifier  « –last-value » de cette
manière pour vous assurer d'importer uniquement les données nouvelles ou mises à jour. Ceci
est géré automatiquement en créant une importation incrémentielle en tant que travail
enregistré, qui est le mécanisme préféré pour effectuer une importation incrémentielle
récurrente.
Nous insérons d'abord une nouvelle ligne qui sera mise à jour dans notre HDFS.

15 | P a g e
La commande pour l'importation incrémentielle est :
sqoop import --connect jdbc:mysql://localhost/employees
--username training --password training --table employee --
target-dir /Latest_Employees
--incremental append --check-column num --last-value 23

V
ous pouvez voir dans l'image ci-dessous, un nouveau fichier est créé avec les données mises à
jour.

Sqoop - Importer toutes les tables

Vous pouvez importer toutes les tables du serveur de base de données RDBMS vers
le HDFS. Chaque donnée de table est stockée dans un répertoire séparé et le nom du
répertoire est le même que le nom de la table. Il est obligatoire que chaque table de

16 | P a g e
cette base de données ait un champ de clé primaire. La commande pour
importer toute la table d'une base de données est :
sqoop import-all-tables --connect
jdbc:mysql://localhost/employees --username training –password
training

Sqoop — Liste des bases de données

Vous pouvez répertorier les bases de données présentes dans la base de données relationnelle à

l'aide de Sqoop. L'outil Sqoop « list-databases » analyse et exécute la requête

"SHOW DATABASES" sur le serveur de base de données. La commande pour lister les bases

de données est :
sqoop list-databases --connect jdbc:mysql://localhost/ --username
training –password training

17 | P a g e
Sqoop — Liste des tableaux

Vous pouvez également répertorier les tables d'une base de données particulière dans le serveur

de base de données MySQL à l'aide de Sqoop. L'outil Sqoop « list-tables » analyse et exécute

la requête "SHOW TABLES". La commande pour lister les tables d'une base de données est :
sqoop list - tables -- connect jdbc : mysql://localhost/employes
--username training –password training

Com
me nous l'avons vu ci-dessus, vous pouvez également exporter des données du HDFS vers la
base de données RDBMS. La table cible doit exister dans la base de données cible. 
Les données sont stockées sous forme d'enregistrements dans HDFS. Ces enregistrements sont
lus, analysés et délimités par un délimiteur spécifié par l'utilisateur. L'opération par défaut
consiste à insérer tous les enregistrements des fichiers d'entrée dans la table de base de données
à l'aide de l'instruction INSERT. 
En mode mise à jour, Sqoop génère l'instruction UPDATE qui remplace l'enregistrement
existant dans la base de données.

Donc, d'abord, nous créons une table vide, où nous allons exporter nos données.

La commande pour exporter des données de HDFS vers une base de données relationnelle est :
sqoop export --connect jdbc:mysql://localhost/employees --
username training –password training --table emp --export-dir
/user/root/employee

18 | P a g e
Nous avons archivé MySQL si les données sont exportées avec succès ou non.

Sqoop — Codegen

Dans une application orientée objet, chaque table de base de données a une classe d'objet

d'accès aux données qui contient les méthodes 'getter' et 'setter' pour initialiser les

objets. Codegen génère automatiquement la classe DAO. Il génère une classe DAO en Java,

basée sur la structure du schéma de table.


sqoop codegen --connect jdbc:mysql://localhost/employees --
username training –password training --table employee

19 | P a g e
Vous pouvez voir le chemin dans l'image ci-dessus où le code est généré. Allons le chemin et
vérifions les fichiers qui sont créés.

Une autre démonstration avec MariaDB


Tous d’abord nous avons  connecté à MySQL :

On a affiché les bases de données existantes sur le serveur, à l’aide de la commande


« SHOW DATABASES ».

On a créé un autre utilisateur ‘hduser’ :

20 | P a g e
On accorder tous les privilèges à ‘hduser’ sur toutes les bases de données:

Nous avons créé la table ‘emp ‘où les données doivent être importées puis
nous avons inséré les données comme le montre les images ci-dessous.

21 | P a g e
Voilà la description de la table ‘emp’ :

22 | P a g e
Configuration du fichier mapred-site.xml :

Importation du table ‘emp’ à l’aide de la commande ‘import’ 

23 | P a g e
24 | P a g e
Import department database from RDBMS to HDFS

25 | P a g e
Export data from HDFS to RDBMS

26 | P a g e
27 | P a g e
Alors comme on peut voir la table ‘dept’ est ajoute à la base de données :

28 | P a g e
29 | P a g e
sqoop merge --new-data newer --onto older --target-dir
merged \

--jar-file datatypes.jar --class-name Foo --merge-key id

Importation de données de MySQL vers Hive :


Afin de stocker des données dans HDFS, nous utilisons Apache Hive qui fournit une
interface de type SQL entre l’utilisateur et le système de fichiers distribué Hadoop (HDFS)
qui intègre Hadoop. Nous effectuons les étapes suivantes :
On commence tout d’abord par connecter à MySQL  à l’aide de la commande suivant :

mysql –u training –p

On crée une base de donnees et une table et on insère les


données qui doivent etre importees

30 | P a g e
On crée une base de donnees et une table hive ou les donnees
doivent etre importees

31 | P a g e
Il vous montre les données de la table hive_table_export et les champs sont séparés
par une virgule (‘ ‘).

32 | P a g e
33 | P a g e
34 | P a g e

Vous aimerez peut-être aussi