Oozie Sqoop Job

J'essaye d'exécuter le travail de sqoop comme action d'oozie. J'ai MySQL comme métastore sur le noeud jobtracker. J'ai lu quelque part que oozie sqoop ne peut pas créer des tables de hive à partir de l'import. Donc, j'essaie de vider datatables dans hdfs. Est-ce toujours vrai?

J'ai vérifié les bibliothèques de partage.

J'essaye de Sqoop d'une database de MS SQL.

Quand je lance la command sqoop qui n'a pas besoin d'un méta-store depuis shell, ça marche.

sqoop import --connect 'jdbc:sqlserver://host;username=sqoopimport;password=password;database=db1' --table t1--target-dir /user/root/sqoop-import/tmp/t1 

Lorsque j'essaie de lancer cette action en tant qu'action de Socket, je reçois cette erreur

  >>> Invoking Sqoop command line now >>> 2151 [main] WARN org.apache.sqoop.tool.SqoopTool - $SQOOP_CONF_DIR has not been set in the environment. Cannot check for additional configuration. 2259 [main] WARN org.apache.sqoop.ConnFactory - $SQOOP_CONF_DIR has not been set in the environment. Cannot check for additional configuration. 2285 [main] ERROR org.apache.sqoop.tool.BaseSqoopTool - Got error creating database manager: java.io.IOException: No manager for connect ssortingng: 'jdbc:sqlserver://host;username=sqoopimport;password=password;database=db1' at org.apache.sqoop.ConnFactory.getManager(ConnFactory.java:185) at org.apache.sqoop.tool.BaseSqoopTool.init(BaseSqoopTool.java:217) at org.apache.sqoop.tool.ImportTool.init(ImportTool.java:83) at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:464) at org.apache.sqoop.Sqoop.run(Sqoop.java:145) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:181) at org.apache.sqoop.Sqoop.runTool(Sqoop.java:220) at org.apache.sqoop.Sqoop.runTool(Sqoop.java:229) at org.apache.sqoop.Sqoop.main(Sqoop.java:238) at org.apache.oozie.action.hadoop.SqoopMain.runSqoopJob(SqoopMain.java:203) at org.apache.oozie.action.hadoop.SqoopMain.run(SqoopMain.java:172) at org.apache.oozie.action.hadoop.LauncherMain.run(LauncherMain.java:37) at org.apache.oozie.action.hadoop.SqoopMain.main(SqoopMain.java:45) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.oozie.action.hadoop.LauncherMapper.map(LauncherMapper.java:495) at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:50) at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:417) at org.apache.hadoop.mapred.MapTask.run(MapTask.java:332) at org.apache.hadoop.mapred.Child$4.run(Child.java:268) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:396) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1408) at org.apache.hadoop.mapred.Child.main(Child.java:262) 

workflow.xml

 <?xml version="1.0" encoding="UTF-8"?> <workflow-app xmlns="uri:oozie:workflow:0.2" name="sqoop-wf"> <start to="sqoop-node"/> <action name="sqoop-node"> <sqoop xmlns="uri:oozie:sqoop-action:0.2"> <job-tracker>${jobTracker}</job-tracker> <name-node>${nameNode}</name-node> <configuration> <property> <name>mapred.job.queue.name</name> <value>${queueName}</value> </property> <property> <name>oozie.use.system.libpath</name> <value>true</value> </property> <property> <name>oozie.libpath</name> <value>/user/oozie/share/lib/sqoop</value> </property> </configuration> <command>import --connect 'jdbc:sqlserver://host;username=sqoopimport;password=password;database=db1' --table t1--target-dir /user/root/sqoop-import/tmp/t1</command> </sqoop> <ok to="end"/> <error to="fail"/> </action> <kill name="fail"> <message>Sqoop failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message> </kill> <end name="end"/> </workflow-app> 

Je pense que c'est la raison principale. J'ai les libs dans le directory share lib 2285 [principal] ERROR org.apache.sqoop.tool.BaseSqoopTool – Erreur de création du gestionnaire de database: java.io.IOException: Pas de gestionnaire pour la string de connection:

Est-ce que je manque quelque chose? Toute aide est appréciée.

Merci, Abhishek

Lorsque vous exécutez Sqoop en utilisant shell (par exemple Bash ou ZSH), vous devez échapper manuellement les arguments, afin que le shell ne les modifie pas. Dans votre exemple, vous avez placé l'URL JDBC entre guillemets, de sorte que le point-virgule ne soit pas interprété comme la fin de la command. Comme Oozie n'utilise pas shell pour appeler Sqoop, ces caractères d'échappement ne sont pas valides. Par conséquent, vous devez supprimer l'échappement introduit pour le shell dans le stream de travail Oozie.

Par exemple:

 <command>import --connect jdbc:sqlserver://host;username=sqoopimport;password=password;database=db1 --table t1--target-dir /user/root/sqoop-import/tmp/t1</command> 

Notez également qu'il est recommandé d'utiliser les arguments –username et –password au lieu des mêmes propriétés nommées dans l'URL JDBC.

essayez de donner --driver com.microsoft.jdbc.sqlserver.SQLServerDriver dans vos arguments> Assurez-vous également que le --driver com.microsoft.jdbc.sqlserver.SQLServerDriver JDBC MS SQL Server est présent dans le classpath.