Comment puis-je exécuter Sqoop en Java?
J'ai créé un nouveau projet Java, puis j'ai ajouté de la Bibliothèque de Sqoop et Hadoop. (Les Bibliothèques de l' "hadoop-core-1.1.1.jar, sqoop-1.4.2.jar, etc.... ".)
Puis j'ai essayé le code ci-dessous:
public class MySqoopDriver {
public static void main(String[] args) {
String[] str = { "export", "--connect", "jdbc:mysql://localhost/mytestdb", "--hadoop-home",
"/home/yoonhok/development/hadoop-1.1.1", "--table", "tbl_1", "--export-dir", "hdfs://localhost:9000/user/hive/warehouse/tbl_1",
"--username", "yoonhok", "--password", "1234"};
Sqoop.runTool(str);
}
}
Les paramètres sont bonnes, car quand je l'ai essayer dans le terminal, il fonctionne bien.
Mais il ne fonctionne pas. Le message d'erreur est:
13/02/17 16:23:07 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead.
13/02/17 16:23:07 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
13/02/17 16:23:07 INFO tool.CodeGenTool: Beginning code generation
13/02/17 16:23:07 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM `tbl_1` AS t LIMIT 1
13/02/17 16:23:07 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM `tbl_1` AS t LIMIT 1
13/02/17 16:23:07 INFO orm.CompilationManager: HADOOP_HOME is /home/yoonhok/development/hadoop-1.1.1
Note: /tmp/sqoop-yoonhok/compile/86a3cab62184ad50a3ae11e7cb0e4f4d/tbl_1.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
13/02/17 16:23:08 INFO orm.CompilationManager: Writing jar file: /tmp/sqoop-yoonhok/compile/86a3cab62184ad50a3ae11e7cb0e4f4d/tbl_1.jar
13/02/17 16:23:08 INFO mapreduce.ExportJobBase: Beginning export of tbl_1
13/02/17 16:23:09 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
13/02/17 16:23:09 INFO input.FileInputFormat: Total input paths to process : 1
13/02/17 16:23:09 INFO input.FileInputFormat: Total input paths to process : 1
13/02/17 16:23:09 INFO mapred.JobClient: Cleaning up the staging area file:/tmp/hadoop-yoonhok/mapred/staging/yoonhok1526809600/.staging/job_local_0001
13/02/17 16:23:09 ERROR security.UserGroupInformation: PriviledgedActionException as:yoonhok cause:java.io.FileNotFoundException: File /user/hive/warehouse/tbl_1/000000_0 does not exist.
13/02/17 16:23:09 ERROR tool.ExportTool: Encountered IOException running export job: java.io.FileNotFoundException: File /user/hive/warehouse/tbl_1/000000_0 does not exist.
Lorsque je vérifie le HDFS, le fichier existe:
hadoop fs -ls /user/hive/warehouse/tbl_1
Found 1 items
-rw-r--r-- 1 yoonhok supergroup 240 2013-02-16 18:56 /user/hive/warehouse/tbl_1/000000_0
Comment puis-je exécuter Sqoop dans mon programme Java?
J'ai essayé Processbuilder et de Processus, mais je ne veux pas les utiliser.
J'ai vraiment envie d'utiliser le Sqoop API, mais j'ai entendu dire qu'il n'existe pas encore.
J'ai lu cette question mais il ne fonctionne pas pour moi.
Vous devez vous connecter pour publier un commentaire.
Il y a un truc qui a fonctionné pour moi assez facile. Via ssh, vous pouvez exécuter Sqoop commande directement. Juste vous devez utiliser est un SSH Java Bibliothèque
Vous devez suivre cette étape.
Télécharger sshxcute bibliothèque java : https://code.google.com/p/sshxcute/
et l'Ajouter à la build path de votre projet java qui contient le code java suivant
tout d'abord permettez-moi de mentionner que Sqoop 1 n'ont pas de client officiel de l'API. Même si l'appel de Sqoop dans une manière que vous faites est tout à fait commun et de travail.
Basé sur le journal, je suppose que votre application java qui est de l'exécution de Sqoop n'ont pas de configuration hadoop sur le chemin de la classe. Ainsi, Sqoop de ne pas obtenir de l'information au sujet de votre cluster et le travail dans le "local" de mode. Vous avez besoin de mettre la configuration hadoop dans votre classpath pour exécuter Sqoop contre cluster distant. Veuillez checkout suivantes entrée sur stackoverflow pour plus de détails.
Vous pouvez utiliser "SqoopOptions" pour l'exécution de sqoop dans votre Programme Java.
Ceci est un exemple de code pour l'importation d'une table MySql à HDFS.
Pour l'Exportation de voir un exemple de code ci-dessous.
Remarque: Ici fichier de propriété n'est pas utilisée. Assurez-vous d'avoir créé la table à laquelle les données doivent être importées.