mappers example create column java hadoop sqoop

example - ¿Cómo usar Sqoop en el programa Java?



sqoop mysql (5)

Si conoce la ubicación del ejecutable y los argumentos de la línea de comando, puede usar un ProcessBuilder , esto luego puede ejecutarse en un Process separado que Java puede monitorear para completar y devolver el código.

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?


Encuentre a continuación un código de muestra para usar sqoop en el programa Java para importar datos de MySQL a HDFS / HBase. Asegúrate de tener el jar de sqoop en tu classpath:

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 usar el resultado del método run () para el manejo de errores. Esperando que esto ayude.


Por favor, siga el código dado por vikas que funcionó para mí e incluya estos archivos jar en classpath e importe estos paquetes

import com.cloudera.sqoop.SqoopOptions; import com.cloudera.sqoop.tool.ImportTool;

Ref Bibliotecas

  1. Sqoop-1.4.4 jar / sqoop
  2. ojdbc6.jar / sqoop / lib (para oráculo)
  3. commons-logging-1.1.1.jar hadoop / lib
  4. hadoop-core-1.2.1.jar / hadoop
  5. commons-cli-1.2.jar hadoop / lib
  6. commmons-io.2.1.jar hadoop / lib
  7. commons-configuration-1.6.jar hadoop / lib
  8. commons-lang-2.4.jar hadoop / lib
  9. jackson-core-asl-1.8.8.jar hadoop / lib
  10. jackson-mapper-asl-1.8.8.jar hadoop / lib
  11. 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. charsets, jar 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, ¿debo 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 tienes que usar es una biblioteca SSH Java

Tienes que seguir este paso.

Descargue la biblioteca sshxcute java: https://code.google.com/p/sshxcute/ y agréguela a la ruta de compilación de su proyecto java que contiene el siguiente código 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(); } }


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 ej., --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.) sea 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 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 solo carácter, por lo tanto, no lo haga doblemente.
  • Sugeriría dividir la lógica de creación de argumentos de línea de comandos y la ejecución real para que su lógica pueda probarse adecuadamente 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() en comparación con Sqoop.Main() es el hecho de que runTool() 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