En big data, Hadoop est le framework le plus utilisé pour gérer et analyser des données. Cependant, il n’est pas fait pour se connecter directement à des données stockées dans des bases SQL.
En effet, Hadoop a été conçu pour utiliser d’autres technologies de stockage, telles que HDFS ou Hive. Or, la base SQL reste la solution de stockage la plus répandue…
Alors comment concilier les deux ? C’est là que Sqoop entre en scène ! Dans cet article, nous allons découvrir la technologie Sqoop, ses cas d’utilisation et ses objectifs.
Sqoop, une passerelle entre des bases de données cloisonnées et le big data
Sqoop est l’abréviation de « SQL to Hadoop ». Il fait partie de l’écosystème Hadoop, qui est en passe de devenir le standard dans le domaine du big data. Nous parlions déjà de l’écosystème Hadoop dans un article précédent.
Technologie de stockage distribuée vs centralisée
Les technologies de bases de données SQL sont centralisées : un seul serveur se charge d’exécuter toutes les opérations et de stocker toutes les données (en pratique, il est tout de même possible de faire des répliques).
C’est une approche simple, car il y a un seul serveur à gérer, et lorsqu’on a besoin d’augmenter les capacités de notre base de données, on augmente les ressources du serveur.
Cependant, à l’heure du big data, les quantités de données augmentent plus vite que les capacités de stockage des disques durs. Donc il devient parfois impossible, pour des raisons matérielles, d’utiliser un seul serveur.
La particularité de Hadoop est d’être une technologie distribuée, c’est-à-dire qu’une instance Hadoop exploite plusieurs serveurs d’un même réseau à la fois (c’est ce qu’on appelle un cluster).
C’est plus complexe à gérer, mais les limites matérielles sont bien supérieures, car il suffit de brancher de nouveaux serveurs pour augmenter la puissance d’un cluster.
SQL ou big data, pourquoi choisir ?
De plus en plus d’entreprises ont des besoins en big data. Malgré tout, SQL reste la technologie la plus utilisée pour stocker des données et il paraît peu probable que les entreprises soient prêtes à migrer durablement tout leur système vers Hadoop.
La conséquence est qu’au sein d’une organisation, des bases de données SQL sont éparpillées sur différents serveurs (chacune ayant un rôle différent), empêchant une analyse big data de l’ensemble des données en même temps.
Sqoop est l’outil qui permet de ne pas faire de compromis entre des capacités d’analyses en big data et l’utilisation de bases de données SQL.
En effet, Sqoop permet de relier un cluster Hadoop à une (ou plusieurs) base(s) de données SQL, en vue de transférer des données de l’un à l’autre, dans les deux sens.
Exploration des fonctionnalités de Sqoop : sqoop-import et sqoop-export
Rentrons un peu plus dans le concret. En pratique, Sqoop se présente sous la forme d’une boîte à outils en ligne de commandes, codée en Java et accessible avec la commande sqoop.
Comme nous l’avons dit, Sqoop permet de transférer des données ; on retrouve donc deux outils principaux : sqoop-import et sqoop-export.
Import avec Sqoop
La commande sqoop-import (doc) permet (vous l’aurez deviné) d’importer des données d’une base de données SQL vers Hadoop.
Pour utiliser cette commande, vous devez spécifier la base de données SQL d’où les données seront importées. Sqoop, de base, supporte les technologies SQL les plus populaires (mysql, Oracle, PostgreSQL…), mais vous pouvez aussi spécifier un driver particulier via le paramètre — driver.
Ensuite, Sqoop propose plusieurs paramètres d’import, notamment :
- -- as-sequencefile, --as-textfile, -- as-parquetfile, --as-avrodatafile en fonction du type de fichier que vous souhaitez utiliser pour stocker le résultat ;
- -- table pour spécifier une table SQL depuis laquelle importer des données ;
- --query <statement> permettant d’importer les données selon une requête SQL précise ;
- -- incremental pour réaliser un import incrémental et ne pas réimporter des données déjà importées.
De nombreux autres paramètres sont disponibles. À noter que Sqoop utilisera automatiquement le schéma SQL pour s’adapter aux types de données utilisés. Sqoop faisant partie d’un framework distribué, plusieurs processus s’exécutent en parallèle pour un même import, rendant le processus très efficace.
Par défaut, Sqoop importe vos données vers un stockage HDFS, mais vous pouvez aussi utiliser d’autres technologies big data comme destination, notamment HBase ou Hive.
Export avec Sqoop
Après avoir exploité toute la puissance de Hadoop pour faire des analyses big data sur vos données, vous souhaitez peut-être exporter les résultats vers des bases de données SQL.
Sqoop est aussi capable de transférer les données dans cette direction avec la commande sqoop-export (doc).
De la même manière, vous spécifiez une base de données SQL cible. À noter que la table dans laquelle vous souhaitez exporter les données doit déjà exister. Vous pouvez insérer les données (sql INSERT) ou bien mettre à jour des lignes existantes (sql UPDATE).
À l’instar de l’import, de nombreux paramètres d’export existent et l’export est parallélisé pour gagner en efficacité.
Plusieurs autres commandes Sqoop utiles
En plus de l’import et de l’export, Sqoop fournit d’autres outils, notamment :
- sqoop-list-databases et sqoop-list-tables pour lister les schémas des bases de données connectées au serveur ainsi que leurs tables ;
- sqoop-eval permettant d’exécuter une requête SQL directement via Sqoop ;
- validation, une commande pour comparer les données entre la source et la destination (l’objectif est de valider les exports/imports et quantifier les inconsistances).
L’objectif de cet article était de montrer qu’il est possible de combiner la puissance du framework Hadoop en big data avec la praticité des bases de données SQL encore très utilisées.
Pour ce faire, Sqoop est l’outil idéal, car il fait le pont entre ces deux mondes. La suite logique maintenant est d’en apprendre plus sur les traitements de données possibles avec une approche big data.