Tutoriel Apache Sqoop - Importer / Exporter des données entre HDFS et RDBMS



Tutoriel Apache Sqoop: Sqoop est un outil de transfert de données entre Hadoop et des bases de données relationnelles. Ce blog couvre l'importation et l'exportation Sooop depuis MySQL.

Avant de commencer ce tutoriel Apache Sqoop, prenons du recul. Pouvez-vous rappeler l'importance de l'ingestion de données, comme nous en avons discuté dans notre blog précédent sur Apache Flume . Maintenant, comme nous le savons, Apache Flume est un outil d'ingestion de données pour les sources non structurées, mais les organisations stockent leurs données opérationnelles dans des bases de données relationnelles. Il y avait donc besoin d'un outil capable d'importer et d'exporter des données à partir de bases de données relationnelles. C'est pourquoi Apache Sqoop est né. Sqoop peut facilement s'intégrer à Hadoop et vider les données structurées des bases de données relationnelles sur HDFS, complétant ainsi la puissance de Hadoop. C'est pourquoi, exige une solide connaissance d'Apache Sqoop et Flume.

Initialement, Sqoop a été développé et maintenu par Cloudera. Plus tard, le 23 juillet 2011, il a été incubé par Apache. En avril 2012, le projet Sqoop a été promu en tant que projet de premier niveau d'Apache.





Dans ce blog de didacticiel Apache Flume, nous couvrirons:



Nous allons commencer ce didacticiel Apache Sqoop en présentant Apache Sqoop. Ensuite, nous comprendrons les avantages de l'utilisation d'Apache Sqoop.

Tutoriel Apache Sqoop: Introduction à Sqoop

Apache Sqoop - Tutoriel Apache Sqoop - EdurekaEn général, les applications interagissent avec la base de données relationnelle à l'aide du SGBDR, ce qui fait des bases de données relationnelles l'une des sources les plus importantes qui génèrent du Big Data. Ces données sont stockées dans les serveurs RDB dans la structure relationnelle. Ici, Apache Sqoop joue un rôle important dans , fournissant une interaction possible entre le serveur de base de données relationnelle et HDFS.

Donc, Apache Sqoop est un outil dans qui est conçu pour transférer des données entre HDFS (Stockage Hadoop) et des serveurs de bases de données relationnelles comme MySQL, Oracle RDB, SQLite, Teradata, Netezza, Postgres etc. Apache Sqoop importe des données de bases de données relationnelles vers HDFS et exporte des données de HDFS vers des bases de données relationnelles. Il transfère efficacement les données en vrac entre Hadoop et les magasins de données externes tels que les entrepôts de données d'entreprise, les bases de données relationnelles, etc.



C'est ainsi que Sqoop tire son nom - ' SQ L à Had ouvert & Hadoop vers SQL ».

De plus, Sqoop est utilisé pour importer des données à partir de banques de données externes dans des outils de l'écosystème Hadoop comme Ruche & HBase .

php parse string to array

Maintenant, comme nous savons ce qu'est Apache Sqoop. Alors, avançons dans notre tutoriel Apache Sqoop et comprenons pourquoi Sqoop est largement utilisé par les organisations.

Tutoriel Apache Sqoop: Pourquoi Sqoop?

Pour les développeurs Hadoop, le jeu proprement dit démarre après le chargement des données dans HDFS. Ils jouent autour de 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 base de données relationnelle doivent être transférées vers HDFS. La tâche d'écrire le code pour importer et exporter des données de la base de données relationnelle vers HDFS est inintéressant et fastidieux. 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 l'importation et l'exportation de données. Ils doivent simplement 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 de la partie restante.

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.

En avançant dans ce blog du didacticiel Sqoop, nous comprendrons les principales fonctionnalités de Sqoop, puis nous passerons à l'architecture Apache Sqoop.

Tutoriel Apache Sqoop: principales fonctionnalités de Sqoop

Sqoop fournit de nombreuses fonctionnalités importantes telles que:

  1. Pleine charge : Apache Sqoop peut charger la table entière par une seule commande. Vous pouvez également charger toutes les tables d'une base de données à l'aide d'une seule commande.
  2. Incrémentale Charge : Apache Sqoop fournit également la fonction de chargement incrémentiel où vous pouvez charger des parties de la table chaque fois qu'elle est mise à jour.
  3. Parallèle Importer / Exporter : Sqoop utilise le framework YARN pour importer et exporter les données, ce qui offre une tolérance aux pannes en plus du parallélisme.
  4. Importer résultats de SQL requete : Vous pouvez également importer le résultat renvoyé par une requête SQL dans HDFS.
  5. Compression : Vous pouvez compresser vos données en utilisant 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 .
  6. Connecteurs pour tout Majeur SGBDR Bases de données : Apache Sqoop fournit des connecteurs pour plusieurs bases de données SGBDR, couvrant presque toute la circonférence.
  7. Kerberos Sécurité L'intégration : 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.
  8. Charge Les données directement dans HIVE / HBase : Vous pouvez charger des données directement dans Apache Hive pour l'analyse et vider également vos données dans HBase, qui est une base de données NoSQL.
  9. Soutien pour Accumulation : Vous pouvez également demander à Sqoop d'importer la table dans Accumulo plutôt qu'un répertoire dans HDFS.

L'architecture est celle qui permet à Apache Sqoop de bénéficier de ces avantages. Maintenant que nous connaissons les fonctionnalités d'Apache Sqoop, allons de l'avant et comprenons l'architecture et le fonctionnement d'Apache Sqoop.

Tutoriel Apache Sqoop: Architecture et fonctionnement de Sqoop

Voyons comment fonctionne Apache Sqoop en utilisant le diagramme ci-dessous:

L'outil d'importation importe des tables individuelles du SGBDR vers HDFS. Chaque ligne d'une table est traitée comme un enregistrement dans HDFS.

Lorsque nous soumettons la commande Sqoop, notre tâche principale est divisée en sous-tâches qui sont gérées par chaque tâche de carte en interne. Map Task est la sous-tâche, qui importe une partie des données dans l'écosystème Hadoop. Collectivement, toutes les tâches Map importent toutes les données.

L'exportation fonctionne également de la même manière.

L'outil d'exportation exporte un ensemble de fichiers de HDFS vers un SGBDR. Les fichiers fournis en entrée dans Sqoop contiennent des enregistrements, appelés sous forme de lignes dans la table.

Lorsque nous soumettons notre Job, il est mappé dans Map Tasks qui apporte le morceau de données de HDFS. Ces blocs sont exportés vers une destination de données structurées. En combinant tous ces morceaux de données exportés, nous recevons l'ensemble des données à la destination, qui dans la plupart des cas est un SGBDR (MYSQL / Oracle / SQL Server).

Une phase de réduction est requise en cas d'agrégations. Mais, Apache Sqoop importe et exporte simplement les données, il n'effectue aucune agrégation. La tâche de mappage lance plusieurs mappeurs en fonction du nombre défini par l'utilisateur. Pour l'importation Sqoop, chaque tâche de mappage se verra attribuer une partie des données à importer. Sqoop distribue les données d'entrée entre les mappeurs de manière égale pour obtenir des performances élevées. Ensuite, chaque mappeur crée une connexion avec la base de données à l'aide de JDBC et récupère la partie des données affectée par Sqoop et l'écrit dans HDFS ou Hive ou HBase en fonction des arguments fournis dans la CLI.

Maintenant que nous comprenons l'architecture et le fonctionnement d'Apache Sqoop, comprenons la différence entre Apache Flume et Apache Sqoop.

Tutoriel Apache Sqoop: Flume vs Sqoop

La principale différence entre Flume et Sqoop est que:

  • Flume ingère uniquement des données non structurées ou des données semi-structurées dans HDFS.
  • Tandis que Sqoop peut importer et exporter des données structurées depuis des entrepôts de données SGBDR ou d'entreprise vers HDFS ou vice versa.

Maintenant, en avançant dans notre tutoriel Apache Sqoop, il est grand temps de passer par les commandes Apache Sqoop.

Tutoriel Apache Sqoop: commandes Sqoop

  • Sqoop - Commande IMPORT

La commande Import est utilisée pour importer une table depuis des bases de données relationnelles vers HDFS. Dans notre cas, nous allons importer des tables de bases de données MySQL vers HDFS.

Comme vous pouvez le voir dans l'image ci-dessous, nous avons la table des employés dans la base de données des employés que nous importerons dans HDFS.

La commande pour importer la table est:

importation sqoop --connect jdbc: mysql: // localhost / employés - nom d'utilisateur edureka - employés de la table

Comme vous pouvez le voir dans l'image ci-dessous, après l'exécution de cette commande, les tâches de la carte seront exécutées en arrière-plan.

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.

  • Sqoop - Commande IMPORT avec répertoire cible

Vous pouvez également importer la table dans un répertoire spécifique dans HDFS à l'aide de la commande ci-dessous:

import sqoop --connect jdbc: mysql: // localhost / Employees --username edureka --table employés --m 1 --target-dir / Employees

Sqoop importe des données en parallèle à partir de la plupart des sources de base de données. -m La propriété est utilisée pour spécifier le nombre de mappeurs à exécuter.

Sqoop importe des données en parallèle à partir de la plupart des sources de base de données. Vous pouvez spécifier le nombre de tâches de mappage (processus parallèles) à utiliser pour effectuer l'importation en utilisant le -m ou –Num-mappers argument. 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 d'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. Des tâches supplémentaires peuvent offrir une meilleure simultanéité, mais si la base de données est déjà goulot d'étranglement lors de la mise à jour des index, de l'appel de déclencheurs, etc., une charge supplémentaire peut diminuer 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.

  • Sqoop - Commande IMPORT avec clause Where

Vous pouvez importer un sous-ensemble d’une table à l’aide de la clause ‘where’ de 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 ‘ «Clause:

import sqoop --connect jdbc: mysql: // localhost / Employees --username edureka --table Employees --m 3 --where 'emp_no & gt 49000' --target-dir / Latest_Employees

  • Sqoop - Importation incrémentielle

Sqoop fournit un mode d'importation incrémentiel qui peut être utilisé pour récupérer uniquement des lignes plus récentes que certains ensembles de lignes précédemment importés. Sqoop prend en charge deux types d'importations incrémentielles: ajouter et lastmodified . Vous pouvez utiliser l'argument –incremental pour spécifier le type d'importation incrémentielle à effectuer.

Vous devez spécifier ajouter mode lors de l'importation d'une table où de nouvelles lignes sont continuellement ajoutées avec des valeurs d'identifiant de ligne croissantes. Vous spécifiez la colonne contenant l'ID de la ligne avec –Check-colonne . Sqoop importe les lignes où la colonne de contrôle a une valeur supérieure à celle spécifiée avec –Dernière valeur .

Une autre stratégie de mise à jour de table prise en charge par Sqoop est appelée lastmodified mode. Vous devez l'utiliser lorsque les lignes de la table source peuvent être mises à jour, et chaque mise à jour de ce type définira la valeur d'une colonne de dernière modification sur l'horodatage actuel.

Lors de l'exécution d'une importation ultérieure, vous devez spécifier –Dernière valeur 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.

Tout d'abord, nous insérons une nouvelle ligne qui sera mise à jour dans notre HDFS.

La commande d'importation incrémentielle est:

importation sqoop --connect jdbc: mysql: // localhost / Employees --username edureka --table employés --target-dir / Latest_Employees --incremental append --check-column emp_no --last-value 499999

Vous 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 SGBDR 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 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 / employés --username edureka

  • Sqoop - Lister les bases de données

Vous pouvez lister les bases de données présentes dans la base de données relation en utilisant 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 edureka

  • Sqoop - Tables de liste

Vous pouvez également lister 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 est une base de données est:

sqoop list-tables --connect jdbc: mysql: // localhost / employés --username edureka

  • Sqoop - Exportation

Comme nous l'avons vu ci-dessus, vous pouvez également exporter des données du HDFS vers la base de données SGBDR. 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 de mise à jour, Sqoop génère l'instruction UPDATE qui remplace l'enregistrement existant dans la base de données.

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

La commande pour exporter les données de HDFS vers la base de données relationnelle est:

exportation sqoop --connect jdbc: mysql: // localhost / employés --username edureka --table emp --export-dir / user / edureka / Employees

  • Sqoop - Codegen

Dans une application orientée objet, chaque table de base de données possède une classe d’objet d’accès aux données contenant 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.

La commande pour générer du code java est:

sqoop codegen --connect jdbc: mysql: // localhost / Employees --username edureka --table employés

Vous pouvez voir le chemin dans l'image ci-dessus où le code est généré. Prenons le chemin et vérifions les fichiers créés.

J'espère que ce blog est informatif et a une valeur ajoutée pour vous. Si vous souhaitez en savoir plus, vous pouvez passer par ceci qui vous informe sur le Big Data et comment Hadoop résout les défis liés au Big Data.

Maintenant que vous avez compris Apache Sqoop, consultez le par Edureka, une entreprise d'apprentissage en ligne de confiance avec un réseau de plus de 250 000 apprenants satisfaits répartis dans le monde entier. Le cours de formation à la certification Edureka Big Data Hadoop aide les apprenants à devenir des experts dans les domaines HDFS, Yarn, MapReduce, Pig, Hive, HBase, Oozie, Flume et Sqoop en utilisant des cas d'utilisation en temps réel sur le commerce de détail, les médias sociaux, l'aviation, le tourisme et la finance.

Vous avez une question pour nous? Veuillez le mentionner dans la section commentaires et nous vous recontacterons.