Definición de Sqoop
Apache Sqoop es una herramienta de línea de comandos desarrollada para transferir grandes volúmenes de datos de bases de datos relacionarles a Hadoop, de ahí su nombre que viene de la fusión de SQL y Hadoop. Concretamente transforma datos relacionarles en Hive o HBase en una dirección y en la otra de HDFS a datos relacionares como MySQL, Oracle, Postgress o a un data warehouse.
El proceso de transferencia consiste leer fila por fila cada tabla de la base de datos e importarlas a HDFS, la salida de estos es un conjunto de ficheros que puede estar en formato CSV, Avro, binario o de secuencia.
Recientemente se ha creado Sqoop2 para mejorar la usabilidad de Sqoop, proporcionando una aplicación web y mayor integración con Oozie.
Características
- Proporciona una API Java para realizar el procesamiento en la ingesta. Permitiendo programar aplicaciones que realicen algunas tipo de transformación sobre los datos.
- Proporciona comandos para listar tablas y esquemas.
- Soporta cargas incrementarles de datos.
- Proporciona multitud de conectores como FTP, JDBC, Kafka, Kite, SFTP
Ejemplo de como pasar datos entre MySQL y HDFS usando Sqoop
Prerequisitos
Tener instalado Hortonworks (Virtual Box) para Spark
Creación de tabla en base de datos MySQL
Se crea una base de datos con una tabla sobre la que realizará las pruebas, para ello se utilizarán los siguientes comandos.
Acceder a MySql
$ mysql
mysql -u root -p
Nota: tener en cuenta que la lave de MySQL y la del sistema pueden ser diferentes.
Consultar base de datos
mysql> show databases;
Crear base de datos
mysql> create database mibbdd;
Usar base de datos
mysql> use mibbdd;
Crear tabla base
mysql> CREATE TABLE mitabla(
id MEDIUMINT NOT NULL AUTO_INCREMENT,
nombre CHAR(30) NOT NULL,
edad INTEGER(30),
salario INTEGER(30),
PRIMARY KEY (id) );
Crear tabla 2
mysql> CREATE TABLE mitabla2(
id MEDIUMINT NOT NULL AUTO_INCREMENT,
nombre CHAR(30) NOT NULL,
edad INTEGER(30),
salario INTEGER(30),
PRIMARY KEY (id) );
Insertar datos
mysql>INSERT INTO mitabla (nombre, edad, salario) VALUES
("Pedro", 24, 21000), ("Maria", 26, 24000), ("Juan", 28, 25000), ("Luis", 35, 28000), ("Monica", 42, 30000), ("Rosa", 43, 25000), ("Susana", 45, 39000);
Nota: Si se tiene problemas de permiso entrar en mysql y dar todos los permisos:
grant all privileges on *.* to 'root'@'localhost' IDENTIFIED BY 'Clave_MySQL' WITH GRANT OPTION;
Salir de MySql
mysql> exit;
Cargar datos de MySQL a HDFS
Ejemplo de carga de datos desde la tabla «mitabla» de la base de datos «mibbdd» a la carpeta de hdfs de nombre «mitabla_hdfs»
$ sqoop import \ --connect jdbc:mysql://localhost/mibbdd \ --username=root -P \ --table=mitabla \ --driver=com.mysql.jdbc.Driver \ --target-dir=/mitabla_hdfs \ --fields-terminated-by=',' \ --lines-terminated-by '\n'
target-dir: fichero HDFS donde se almacena
table: Identifica la tabla a copiar
clear-staging-table: Indica que se puede borrar los datos pasados
verbose: Imprime información adicional para facilitar la depuración
fields-terminated-by: Definir el delimitador
Cargar datos de HDFS a MySQL
Ejemplo de carga de datos desde la carpeta de hdfs de nombre «mitabla_hdfs» a la tabla «mitabla2» de la base de datos «mibbdd».
$ sqoop export \ --connect jdbc:mysql://localhost/mibbdd \ --username=root -P \ --table=mitabla2 \ --export-dir=/mitabla_hdfs - m 1
Nota: Si se tiene problemas «set $ ACCUMULO_HOME to the root in your Accumulo intallation», se puede evitar con:
$ ACCUMULO_HOME='/var/lib/accumulo' $ export ACCUMULO_HOME $ sudo mkdir /var/lib/accumulo
Para practicar con Sqoop pues consultar: «Ejemplos de Sqoop«, en este apartado recopilo multitud de ejemplos que pueden servirte de utilidad.
Consultar la documentación oficial para Shell
Consultar la documentación oficial para API JAVA
Hola que tal, buen día.
Me llamo Marco, me gustaría saber si se pueden hacer ingestas entre Sqoop y DB2.
Muchas gracias por la información, excelente pagina.
Saludos.
Sí se puede Marco, yo las he realizado en un proyecto.
Buenas Marco, te facilito un enlace que puede ser de ayuda https://www.ibm.com/support/knowledgecenter/en/SSPT3X_4.1.0/com.ibm.swg.im.infosphere.biginsights.import.doc/doc/data_warehouse_sqoop.html
Muchas gracias por el dato, me fue de gran ayuda.
Muy buen contenido, el de tu sitio.
Hola Diego, ante todo muy buena publicacion me esta ayudando en mi investigacion, queria hacerte una consulta:
Estoy haciendo una ETL desde cero, el cliente nos ha dado via libre para usar bigdata … queremos cargar unos ficheros en una BBDD relacional (Oracle) y hemos pensado en hacerlo con Sqoop (cargariamos el fichero en una tabla y de ahi hariamos las transformaciones) esto vendria hacer una ELT y no una ETL?, Queremos utilizar algun componente de BigData, pero no sabemos si con Sqoop, Scala, Spark u otro componente nos vendria mejor?
Buenas Leonardo,
Te recomiendo que valores también otras herramientas que te pueden facilitar la ingesta de datos como NIFI. (https://www.diegocalvo.es/nifi/)
Par la parte de transformación de datos yo suelo usar Spark.
Gracias Diego …
Soy nueva con la tecnologia y tengo una consulta se puede utilizar sqoop con sql2016 ? podrian referirme un manual porfavor para saber como utilizarlo mil gracias