Cette rubrique récapitule les problèmes courants rencontrés avec Sqoop.
Décalage de 8 heures des champs d'horodatage après l'importation
-
Problème
Par exemple, la table test_table d'une source de données ApsaraDB RDS contient un champ d'horodatage. Lorsque vous interrogez la table source
test_tabledans DMS, le résultat affiche cinq enregistrements avec les colonnesidetapplied_at. Les valeurs de la colonneapplied_ats'étendent du 14/06/2024 10:08:04 au 18/06/2024 10:08:04 (incrémentées d'un jour, l'heure restant fixée à 10:08:04).-
Exécutez la commande suivante pour importer les données de test_table vers HDFS.
sqoop import \ --connect jdbc:mysql://rm-2ze****341.mysql.rds.aliyuncs.com:3306/s***o_sqoop_db \ --username s***o \ --password ****** \ --table test_table \ --target-dir /user/hadoop/output \ --delete-target-dir \ --direct \ --split-by id \ --fields-terminated-by '|' \ -m 1 -
Interrogez le résultat de l'importation.
Le résultat indique que le champ d'horodatage dans HDFS est décalé de 8 heures en arrière.
[root@master-1-1(xxx) ~]# hdfs dfs -cat /user/hadoop/output/part-m-00000 1 2024-06-18 02:08:04 2 2024-06-17 02:08:04 3 2024-06-16 02:08:04 4 2024-06-15 02:08:04 5 2024-06-14 02:08:04
-
Solution : lors de l'importation de données contenant un champ d'horodatage vers HDFS, supprimez l'argument --direct.
sqoop import \ --connect jdbc:mysql://rm-2ze****341.mysql.rds.aliyuncs.com:3306/s***o_sqoop_db \ --username s***o \ --password ****** \ --table test_table \ --target-dir /user/hadoop/output \ --delete-target-dir \ --split-by id \ --fields-terminated-by '|' \ -m 1Le résultat de la requête affiche désormais les valeurs correctes.
[root@master-1-1(xxx) ~]# hdfs dfs -cat /user/hadoop/output1/part-m-00000 1 2024-06-18 10:08:04.0 2 2024-06-17 10:08:04.0 3 2024-06-16 10:08:04.0 4 2024-06-15 10:08:04.0 5 2024-06-14 10:08:04.0