lunes, junio 02, 2014

Logística de datos con Apache Sqoop: Exportando datos del HDFS a MySQL

En este tutorial vamos a hacer el proceso inverso al que hicimos en el primer tutorial sobre importación de tablas SQL hacia el HDFS. En este caso vamos a exportar los datos que tenemos en el HDFS hacia una tabla en MySQL.

Preparando una tabla

Primero hay que tener una tabla preparada para la recepción de los datos con una estructura igual al de los datos que se van a recibir. Los datos que vamos a usar son los mismos que emitimos en el tutorial anterior:
1,mario
2,caster

Vamos a crear una tabla en mysql que tenga un int en la primera columna y un varchar(50) en la segunda:
CREATE TABLE `sqoop-import`( id int NOT NULL, name varchar(50) NOT NULL, PRIMARY KEY (id) );


Ya tenemos todo preparado con los archivos dentro de la carpeta "/user/mariocaster/sqoop-table/part-m-*". Para importarlos el comando a usar es el siguiente:

sqoop export --connect jdbc:mysql://localhost/sqoop-test --export-dir /user/MaC/sqoop-table --table sqoop-import --username root --password pass -m 1 --input-fields-terminated-by ',' --direct


  1. El comando que tenemos que usar es sqoop import para importar bases de datos
  2. Se le pasa el argumento --connect jdbc:mysql://[host]/[bbdd] para indicarle el host y la bbdd de la que queramos importar una tabla
  3. Ahora le indicamos el directorio del HDFS que vamos a exportar a la BBDD, en este caso con el argumento --export-dir /[ruta]
  4. Después le indicamos el nombre de la tabla a donde vamos a importar los datos, la hemos llamado "sqoop-import". El argumento a usar es: -table sqoop-import
  5. En el caso de la BBDD que tenemos localmente, hay que usar unas credenciales para permitir el acceso. Se las pasamos con: --username [user] y --password [pass]
  6. Con -m 1 le indicamos que solamente queremos usar un mapper para realizar la exportación
  7. --input-fields-terminated-by ','  es usado para indicarle al script que los campos de los archivos del HDFS están separados por ',' (coma)
  8. Activado el "modo directo" con --direct para MySQL que nos permite obtener unas operaciones mas rápidas haciendo uso de la herramienta mysqlimport


Podemos ver nuestros conocidos logs de MapReduce y es que, Sqoop, usa MapReduce en segundo plano para ejecutar sus consultas (de una manera similar a Hive y Pig)

Una vez ejecutada la importación, vamos a usar un prompt the mysql para ver que datos se han cargado dentro de la tabla.

mysql>USE `sqoop-test`;
mysql>SELECT * FROM `sqoop-import`;
+----+--------+
| id | name   |
+----+--------+
|  1 | mario  |
|  2 | caster |
+----+--------+
2 rows in set (0.00 sec)


Con esto ya tenemos, los datos del HDFS de vuelta en la BBDD de MySQL. Espero que os haya gustado el tutorial.

0 comentarios:

Publicar un comentario