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: