El proceso de importación y exportación de datos en Sqoop puede ser un proceso muy repetitivo, y si bien es cierto, que los comandos de importación y exportación de Sqoop tienen varios parámetros que pueden resultar difícil de recordar o que cometamos algún error en la escritura lo que hace que nos demoremos en la ejecución de las tareas corrigiendo ese tipo de errores. Para ello Sqoop nos permite guardar trabajos, asignándoles un nombre para luego ejecutarlos directamente. Esto resulta de especial interés por ejemplo en la importación incremental, cuando realizamos el proceso repetidamente.

Para ello, vamos a utilizar la herramienta sqoop-job para guardar trabajos. Sqoop guarda la información de configuración  necesaria para ejecutar un comando sqoop posteriormente. Por defecto la información se guarda en un repositorio privado almacenado en $HOME/.sqoop/. Este repositorio es compartido por múltiples usuarios en un clúster compartido, se puede cambiar el repositorio mediante la herramienta sqoop-metastore.

La herramienta para guardar trabajos es sqoop-job como ya hemos comentado, la sintaxis sería la siguiente (se puede usar indistintamente sqoop-job o sqoop job):

sqoop job --create jobname -- jobarguments

Vamos a ver algunos ejemplos.

Guardar trabajo

Ejecutamos el primer lugar una importación para importarnos las 100 primeras filas de la tabla “Contacts” (podéis obtener más información de importación de datos en el post “Importar datos desde SQL Server a HDFS”). Luego crearemos un trabajo para realizar una importación incremental, guardando este último trabajo. Ejecutamos el primer lugar el siguiente comando para realizar la importación. En la consola de comandos de Hadoop, escribid (Recordad sustituir SERVERNAME por el nombre de vuestro servidor y INSTANCENAME por el nombre de vuestra instancia de SQL Server):

sqoop import --connect "jdbc:sqlserver://SERVERNAMEINSTANCENAME:1433;database=northwind;integratedSecurity=true" --table "Contacts" --where "ContactID < 100" --target-dir "/user/hadoop/sqoop/contacts"

Ahora, como hemos dicho, vamos a realizar una importación incremental y vamos a guardar el trabajo para posteriormente ejecutarlo cuando nosotros queramos, o bien ejecutarlo de forma periódica de forma automática. Un aspecto importante a tener en cuenta, es que hemos comentado que la información se guarda en un directorio compartido que accesible por múltiples usuarios en un cluster, por lo que debemos especificar el usuario y la contraseña para acceder a la instancia de SQL Server, en nuestro caso SQL Server tiene autenticación de Windows  hemos especificado sólo el usuario, pero al ejecutar el comando, nos solicita el password.  El comando para guardar el trabajo sería:

sqoop job --create jobcontacts -- import --connect "jdbc:sqlserver://SERVERNAMEINSTANCENAME:1433;database=northwind;integratedSecurity=true" --username Administrator --table Contacts --check-column ContactID --incremental append --target-dir /user/hadoop/sqoop/contactsincremental
 

NOTA: Observad que después del nombre del trabajo “jobcontacts”, hay dos guiones seguidos de un espacio en blanco y seguido del comando que queramos guardar. El proceso sería totalmente trivial para guardar un trabajo que fuera una exportación (leer el post “Exportar datos desdes Hadoop a SQL Server utilizando Sqoop” para obtener más información”)

Ejecutar un trabajo

Para ejecutar el trabajo anterior que hemos guardado, al cual le hemos asignado el nombre “jobcontacts”, el comando sería:

sqoop job --exec jobcontacts

Eliminar un trabajo

Y si queremos eliminar el trabajo guardado, el comando sería:

sqoop job --delete jobcontacts
 

Post relacionados con Sqoop: