Apache Sqoop transfère des volumes importants de données entre Apache Hadoop et des ensembles de données structurées, tels que les bases de données relationnelles. Utilisez cet outil pour déplacer des données entre MySQL, Hadoop Distributed File System (HDFS), Hive et Object Storage Service (OSS) sur des clusters EMR.
Exécutez toutes les commandes sur le nœud principal de votre cluster.
Scénarios pris en charge
Importer des données de MySQL vers HDFS
sqoop import --connect <dburi>/<dbname> --username <username> --password <password> \
--table <tablename> --target-dir <hdfs-dir> \
--split-by <split-column> \
--check-column <col> --incremental <mode> --last-value <value>
| Paramètre | Obligatoire | Description |
|---|---|---|
dburi |
Oui | URL d'accès à la base de données. Exemple : jdbc:mysql://192.168..:3306/ |
dbname |
Oui | Nom de la base de données |
username |
Oui | Nom d'utilisateur pour se connecter à la base de données |
password |
Oui | Mot de passe pour se connecter à la base de données |
tablename |
Oui | Nom de la table MySQL |
hdfs-dir |
Oui | Répertoire HDFS dans lequel écrire les données. Exemple : /user/hive/result |
split-column |
Non | Colonne utilisée pour diviser les tâches parallèles. La valeur par défaut est la colonne de clé primaire. |
col |
Non | Colonne utilisée pour identifier les lignes lors d'une importation incrémentielle. |
mode |
Non | Mode d'importation incrémentielle. Valeurs valides : append et lastmodified. |
value |
Non | Valeur maximale de la colonne issue de la précédente importation incrémentielle. |
Pour obtenir la référence complète des paramètres, consultez la section Syntax du guide d'utilisation de Sqoop.
Importer des données de HDFS vers MySQL
Avant d'exécuter cette commande, créez une table MySQL dont le schéma correspond à la structure des données HDFS.
sqoop export --connect <dburi>/<dbname> --username <username> --password <password> \
--table <tablename> --export-dir <hdfs-dir>
| Paramètre | Obligatoire | Description |
|---|---|---|
dburi |
Oui | URL d'accès à la base de données. Exemple : jdbc:mysql://192.168..:3306/ |
dbname |
Oui | Nom de la base de données |
username |
Oui | Nom d'utilisateur pour se connecter à la base de données |
password |
Oui | Mot de passe pour se connecter à la base de données |
tablename |
Oui | Nom de la table MySQL |
hdfs-dir |
Oui | Répertoire source HDFS. Exemple : /user/hive/result |
Pour obtenir la référence complète des paramètres, consultez la section Syntax du guide d'utilisation de Sqoop.
Importer des données de Hive vers MySQL
Les tables Hive sont stockées sous forme de fichiers dans HDFS. Pour exporter une table Hive vers MySQL, utilisez la même commande sqoop export que celle décrite dans la section Importer des données de HDFS vers MySQL, en spécifiant le répertoire HDFS de la table Hive comme paramètre --export-dir.
Importer des données de MySQL vers Hive
sqoop import --connect <dburi>/<dbname> --username <username> --password <password> \
--table <tablename> \
--check-column <col> --incremental <mode> --last-value <value> \
--fields-terminated-by "\t" --lines-terminated-by "\n" \
--hive-import --target-dir <hdfs-dir> --hive-table <hive-tablename>
| Paramètre | Obligatoire | Description |
|---|---|---|
dburi |
Oui | URL d'accès à la base de données. Exemple : jdbc:mysql://192.168..:3306/ |
dbname |
Oui | Nom de la base de données |
username |
Oui | Nom d'utilisateur pour se connecter à la base de données |
password |
Oui | Mot de passe pour se connecter à la base de données |
tablename |
Oui | Nom de la table MySQL |
hdfs-dir |
Oui | Répertoire intermédiaire de transit HDFS. Exemple : /user/hive/result |
hive-tablename |
Oui | Nom de la table Hive cible |
col |
Non | Colonne utilisée pour identifier les lignes lors d'une importation incrémentielle. |
mode |
Non | Mode d'importation incrémentielle. Valeurs valides : append et lastmodified. |
value |
Non | Valeur maximale de la colonne issue de la précédente importation incrémentielle. |
Pour obtenir la référence complète des paramètres, consultez la section Syntax du guide d'utilisation de Sqoop.
Importer des données de MySQL vers OSS
sqoop import --connect <dburi>/<dbname> --username <username> --password <password> \
--table <tablename> --target-dir <oss-dir> --temporary-rootdir <oss-tmpdir> \
--check-column <col> --incremental <mode> --last-value <value>
| Paramètre | Obligatoire | Description |
|---|---|---|
dburi |
Oui | URL d'accès à la base de données. Exemple : jdbc:mysql://192.168..:3306/ |
dbname |
Oui | Nom de la base de données |
username |
Oui | Nom d'utilisateur pour se connecter à la base de données |
password |
Oui | Mot de passe pour se connecter à la base de données |
tablename |
Oui | Nom de la table MySQL |
oss-dir |
Oui | Répertoire de destination OSS. Exemple : oss://<AccessKeyId>:<AccessKeySecret>@<BucketName>.oss-cn-hangzhou-internal.aliyuncs.com/result |
oss-tmpdir |
Obligatoire si mode=append |
Répertoire temporaire OSS. Lorsque le paramètre mode est défini sur append, Sqoop écrit d'abord les données dans ce répertoire, puis renomme les fichiers vers la destination. Si le répertoire de destination existe déjà dans HDFS, Sqoop n'importe ni n'écrase les données. |
col |
Non | Colonne utilisée pour identifier les lignes lors d'une importation incrémentielle. |
mode |
Non | Mode d'importation incrémentielle. Valeurs valides : append et lastmodified. |
value |
Non | Valeur maximale de la colonne issue de la précédente importation incrémentielle. |
Pour obtenir la référence complète des paramètres, consultez la section Syntax du guide d'utilisation de Sqoop.
Importer des données de OSS vers MySQL
Avant d'exécuter cette commande, créez une table MySQL dont le schéma correspond à la structure des données OSS.
sqoop export --connect <dburi>/<dbname> --username <username> --password <password> \
--table <tablename> --export-dir <oss-dir>
| Paramètre | Obligatoire | Description |
|---|---|---|
dburi |
Oui | URL d'accès à la base de données. Exemple : jdbc:mysql://192.168..:3306/ |
dbname |
Oui | Nom de la base de données |
username |
Oui | Nom d'utilisateur pour se connecter à la base de données |
password |
Oui | Mot de passe pour se connecter à la base de données |
tablename |
Oui | Nom de la table MySQL |
oss-dir |
Oui | Répertoire source OSS. Exemple : oss://<AccessKeyId>:<AccessKeySecret>@<BucketName>.oss-cn-hangzhou-internal.aliyuncs.com/result |
Pour obtenir la référence complète des paramètres, consultez la section Syntax du guide d'utilisation de Sqoop.
Utiliser une instruction SQL pour importer des données
Utilisez l'option --query pour filtrer les lignes avec une instruction SQL personnalisée au lieu d'importer une table entière.
sqoop import --connect <dburi>/<dbname> --username <username> --password <password> \
--query <query-sql> --split-by <sp-column> \
--hive-import --hive-table <hive-tablename> --target-dir <hdfs-dir>
| Paramètre | Obligatoire | Description |
|---|---|---|
dburi |
Oui | URL d'accès à la base de données. Exemple : jdbc:mysql://192.168..:3306/ |
dbname |
Oui | Nom de la base de données |
username |
Oui | Nom d'utilisateur pour se connecter à la base de données |
password |
Oui | Mot de passe pour se connecter à la base de données |
query-sql |
Oui | Instruction SQL permettant de sélectionner les données à importer. Doit inclure $CONDITIONS. Exemple : SELECT * FROM profile WHERE id>1 AND \$CONDITIONS |
sp-column |
Oui | Colonne utilisée pour diviser les tâches parallèles. Il s'agit généralement de la clé primaire de la table MySQL. |
hdfs-dir |
Oui | Répertoire intermédiaire de transit HDFS. Exemple : /user/hive/result |
hive-tablename |
Oui | Nom de la table Hive cible |
Pour obtenir la référence complète des paramètres, consultez la section Syntax du guide d'utilisation de Sqoop.