Sé cómo usar sqoop a través de la línea de comandos. Pero no sé cómo llamar al comando sqoop usando programas java. ¿Alguien puede dar alguna vista de código?¿Cómo usar Sqoop en el programa Java?
Respuesta
Puede ejecutar sqoop desde dentro de su código java incluyendo el jar sqoop en su classpath y llamando al método Sqoop.runTool()
. Debería crear los parámetros necesarios en sqoop mediante programación como si fuera la línea de comando (por ejemplo, --connect
, etc.).
Por favor, preste atención a lo siguiente:
- Asegúrese de que el nombre de la herramienta Sqoop (por ejemplo, importación/exportación, etc.) es el primer parámetro.
- Preste atención al pedido de classpath: la ejecución puede fallar porque sqoop requiere la versión X de una biblioteca y utiliza una versión diferente. Asegúrese de que las bibliotecas que requiere sqoop no se vean eclipsadas por sus propias dependencias. Me he encontrado con un problema con commons-io (sqoop requiere v1.4) y tenía una excepción NoSuchMethod ya que estaba usando commons-io v1.2.
- Cada argumento debe estar en un elemento de matriz por separado. Por ejemplo, "--connect jdbc: mysql: ..." se debe pasar como dos elementos separados en el conjunto, no uno.
- El analizador de sqoop sabe cómo aceptar los parámetros de doble cita, así que utilice comillas dobles si es necesario (sugiero siempre). La única excepción es el parámetro delimitado por campos que espera un único carácter, por lo que no lo cite por partida doble.
- Sugiero dividir la lógica de creación de argumentos de línea de comandos y la ejecución real para que su lógica se pueda probar correctamente sin ejecutar realmente la herramienta.
- Sería mejor utilizar el parámetro --hadoop-home, para evitar la dependencia del entorno.
- La ventaja de
Sqoop.runTool()
frente aSqoop.Main()
es el hecho de querunTool()
devuelve el código de error de la ejecución.
Espero que ayude.
final int ret = Sqoop.runTool(new String[] { ... });
if (ret != 0) {
throw new RuntimeException("Sqoop failed - return code " + Integer.toString(ret));
}
RL
gracias ... Estaba buscando Sqoop Docs en la red para ver los detalles de cada método ... pero no pude encontrarlo ... ¿me puede decir algo sobre los documentos de sqoop – pradeep
Los documentos que he utilizado están en http: // archive.cloudera.com/cdh/3/sqoop/SqoopUserGuide.html#_controlling_the_hadoop_installation. Sin embargo, no describen ese método de ejecución de Sqoop. He usado el código fuente de Sqoop para eso, con la ayuda del proyecto oozie (http://incubator.apache.org/oozie/) –
Oye si tuvieras un ejemplo de código ... eso ayudaría. –
Si conoce la ubicación del archivo ejecutable y los argumentos de la línea de comandos, puede usar un ProcessBuilder
, esto puede ejecutarse por separado Process
que Java puede supervisar para completar y devolver el código.
En general, si hay un punto de integración api, es mejor usarlo que engendrar procesos secundarios. – Turbo
Encuentra debajo de un código de ejemplo para usar en Sqoop programa Java para importar datos de MySQL a HDFS/HBase. Asegúrese de que tiene frasco Sqoop en la ruta de clases:
SqoopOptions options = new SqoopOptions();
options.setConnectString("jdbc:mysql://HOSTNAME:PORT/DATABASE_NAME");
//options.setTableName("TABLE_NAME");
//options.setWhereClause("id>10"); // this where clause works when importing whole table, ie when setTableName() is used
options.setUsername("USERNAME");
options.setPassword("PASSWORD");
//options.setDirectMode(true); // Make sure the direct mode is off when importing data to HBase
options.setNumMappers(8); // Default value is 4
options.setSqlQuery("SELECT * FROM user_logs WHERE $CONDITIONS limit 10");
options.setSplitByCol("log_id");
// HBase options
options.setHBaseTable("HBASE_TABLE_NAME");
options.setHBaseColFamily("colFamily");
options.setCreateHBaseTable(true); // Create HBase table, if it does not exist
options.setHBaseRowKeyColumn("log_id");
int ret = new ImportTool().run(options);
Como sugiere Harel, podemos utilizar la salida del método run() para el tratamiento de errores. Esperando que esto ayude.
Por favor, siga el código dado de Vikas que trabajó para mí y para incluir estos archivos jar en la ruta de clase e importar estos paquetes
com.cloudera.sqoop.SqoopOptions de importación; import com.cloudera.sqoop.tool.ImportTool;
Ref Bibliotecas
- Sqoop-1.4.4 jar/Sqoop
- ojdbc6.jar/Sqoop/lib (para Oracle)
- commons-logging-1.1.1.jar hadoop/lib
- hadoop-core-1.2.1.jar/hadoop hadoop
- commons-cli-1.2.jar/lib hadoop
- Commmons-io.2.1.jar/lib
- commons-configuración-1.6.jar hadoop/lib
- commons-lang-2.4.jar hadoop/lib
- hadoop Jackson-core-ASL-1.8.8.jar/lib
- Jackson-mapper-asl- 1.8.8.jar hadoop/lib
- commons-httpclient-3.0.1.jar hadoop/lib
biblioteca del sistema JRE
1.resources.jar jdk/jre/lib 2.rt .jar jdk/jre/lib 3. jsse.jar jdk/jre/lib 4. jce.jar jdk/jre/lib 5. juegos de caracteres, tarro jdk/jre/lib 6. jfr.jar jdk/jre/lib 7. dnsns.jar jdk/jre/lib/ext 8. sunec .jar jdk/jre/lib/ext 9. zipfs.jar jdk/jre/lib/ext 10. sunpkcs11.jar jdk/jre/lib/ext 11. localedata.jar jdk/jre/lib/ext 12 sunjce_provider.jar jdk/jre/lib/ext
A veces obtienes un error si tu proyecto eclipse usa JDK1.6 y las bibliotecas que agregas son JDK1.7 para este caso configura JRE al crear un proyecto en eclipse.
Vikas si quiero poner los archivos importados en la colmena debería usar options.parameter ("--hive-import")?
Hay un truco que funcionó para mí bastante fácil. A través de ssh puede ejecutar el comando Sqoop directamente. Solo tiene que usar una biblioteca SSH Java
Tiene que seguir este paso.
descarga Biblioteca sshxcute java: https://code.google.com/p/sshxcute/ y añadirlo a la trayectoria de la estructura de su proyecto de Java que contiene el siguiente código de Java
import net.neoremind.sshxcute.core.SSHExec;
import net.neoremind.sshxcute.core.ConnBean;
import net.neoremind.sshxcute.task.CustomTask;
import net.neoremind.sshxcute.task.impl.ExecCommand;
public class TestSSH {
public static void main(String args[]) throws Exception{
// Initialize a ConnBean object, parameter list is ip, username, password
ConnBean cb = new ConnBean("192.168.56.102", "root","hadoop");
// Put the ConnBean instance as parameter for SSHExec static method getInstance(ConnBean) to retrieve a singleton SSHExec instance
SSHExec ssh = SSHExec.getInstance(cb);
// Connect to server
ssh.connect();
CustomTask sampleTask1 = new ExecCommand("echo $SSH_CLIENT"); // Print Your Client IP By which you connected to ssh server on Horton Sandbox
System.out.println(ssh.exec(sampleTask1));
CustomTask sampleTask2 = new ExecCommand("sqoop import --connect jdbc:mysql://192.168.56.101:3316/mysql_db_name --username=mysql_user --password=mysql_pwd --table mysql_table_name --hive-import -m 1 -- --schema default");
ssh.exec(sampleTask2);
ssh.disconnect();
}
}
funciona bien, pero el registro parece ser incorrecto. El trabajo de Sqoop se ejecuta con éxito y la consola muestra que el trabajo ha fallado. 'Compruebe si el éxito es ejecutivo o no ... Error de ejecución al ejecutar el comando: sqoop import --connect .... Mensaje de error:
- 1. Cómo usar autoincrement-IDs en la exportación Sqoop
- 2. ¿Cómo se usa la clase generada en sqoop en MapReduce?
- 3. Java: cómo obtener el número actual de conjuntos de cambios mercuriales para usar en el programa
- 4. Ejemplos para usar Apache UIMA en un programa Java
- 5. ¿Cómo usar el método readline() en Java?
- 6. cómo compilar y ejecutar el programa java en otro programa java?
- 7. Cómo ejecutar el programa Java en el símbolo del sistema
- 8. ¿Puedes usar bibliotecas Java en un programa VB.net?
- 9. Problema en el programa TCP (Java)
- 10. Incrustar swank-clojure en el programa java
- 11. ¿Cómo ejecutar testcase externo (Class, junit) en el programa java?
- 12. ¿Cómo ejecutar el programa Java y obtener resultados en PHP?
- 13. Java: Cómo usar Thread.join
- 14. ¿Cómo funciona el CTRL-C con el programa Java
- 15. ¿Cómo encontrar el tiempo necesario para ejecutar el programa Java?
- 16. programa externo de parada cuando el programa Java se detuvo
- 17. comprobar el programa java de instancia única
- 18. Obtener el nombre del programa Java
- 19. ¿Cómo importo jar a mi programa java?
- 20. Abrir con ... un programa Java
- 21. start-stop-daemon y el programa java
- 22. Ejecutar un programa Java de nuestro programa Java
- 23. ¿Cómo usar HtmlUnit en Java?
- 24. cómo usar ln en Java
- 25. ¿Cómo escribir un programa de actualización automática en Java?
- 26. ¿Cómo usar yaml-cpp en un programa C++ en Linux?
- 27. ¿Cómo ejecutar un programa Java desde C#?
- 28. compilación del programa java
- 29. ¿Cómo hacer que el programa Java sea instalable?
- 30. Cómo usar los comandos mkdir y rmdir en un programa java
Runtime.exec (comando); ¿Es eso lo que estás buscando? Http: //docs.oracle.com/javase/1.5.0/docs/api/java/lang/Runtime.html – kosa