Apache Sqoop

Definición de Sqoop

Sqoop logoApache Sqoop es una herramienta de línea de comando 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, Postgres 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 cdv, 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 de MySQL a 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
Puede probocar un ERROR 1045 (28000): Access denied for user ‘root’@’localhost,  que se soluciona:
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

mysql> CREATE TABLE mitabla(
         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);

Salir de MySql

mysql> exit;

Grabar datos en HDFS

El grabado de datos en formato HDFS se puede realizar utilizando la herramienta Sqoop

$ sqoop import \
 --connect jdbc:mysql://localhost/mibbdd \
 --username=root -P \
 --table=mitabla \
 --driver=com.mysql.jdbc.Driver \
 --target-dir=/mitabla_hdfs \
--fields-terminated-by=','

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

Nota: Si se tiene problemas de permiso entrar en mysql y dar todos los permisos:

grant all privileges on *.* to 'root'@'localhost' IDENTIFIED BY 'Spark2018' WITH GRANT OPTION;

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

Consultar la documentación oficial para Shell

Consultar la documentación oficial para API JAVA

Autor: Diego Calvo