Sqoop es una herramienta que nos permite la transferencia de datos entre un sistema relacional de base de datos y Hadoop. En post anteriores vimos como importar datos desde SQL Server a HDFS y a Hive utilizando Sqoop. En este post vamos a ver cómo podemos exportar datos dese Hadoop a SQL Server, dichos datos pueden estar en HDFS como ser tablas Hive.

Para este ejemplo, vamos a crearnos una tabla en Hive y luego exportarla a SQL Server. La tabla Hive la crearemos a raíz de un fichero csv, con los campos separados por comas. Vamos a ver el proceso completo para mayor claridad, de la creación de la tabla Hive y como cargar los datos en dicha tabla con los datos del fichero csv.

  • Cargamos el fichero csv, el cual contiene los datos de la tabla, a Hadoop, luego en la consola de comandos de Hadoop escribimos:
    La sintaxis sería: hadoop fs –copyFromLocal RutaLocal PathHDFS
hadoop fs -copyFromLocal C:Sqoopclientes.csv /user/hadoop/sqoop/clientes.csv

 

  • Creamos la tabla Hive. Para ello abrir otra instancia de la consola de comandos de Hadoop y escribir cd C:Hadoophive-0.9.0bin y luego hive.

image_thumb_72B968E1

  • En la consola de hive escribir la siguiente sentencia para crear la tabla clientes:
CREATE TABLE clientes(
 IdCliente int,
 Nombre string,
 Apellido string,
 Direccion string,
 Pais string,
 Telefono string)
 ROW FORMAT DELIMITED
 FIELDS TERMINATED BY ',';

image_thumb_3_72B968E1

  • Y ahora cargamos el fichero que contiene los datos en la tabla clientes que acabamos de crear.
LOAD DATA INPATH '/user/hadoop/sqoop/export.csv' INTO TABLE clientes;

image_thumb_2_72B968E1

  • La tabla Hive ya está creada con los datos cargados, podríamos trabajar con ella, realizar consultar, explotar los datos con algún trabajo Map Reduce, etc. Comprobamos que se ha creado correctamente realizando una consulta simple:

SELECT * FROM clientes LIMIT 10;

image_thumb_5_72B968E1

 

Una vez tenemos ya la tabla en Hive, vamos ahora a exportarla a SQL Server. Es obligatorio antes de realizar la exportación, que la tabla exista en el destino, por lo tanto debemos crearla previamente. En SQL Server Management Studio, escribimos una nueva query para crear la tabla:

CREATE TABLE [dbo].[Clientes](
 [ClientesID] [int] NOT NULL primary key,
 [Nombre] [varchar](255) NULL,
 [Apellido] [varchar](255) NULL,
 [Email] [varchar](255) NULL,
 [Pais] [varchar](100) NULL,
 [Telefono] [varchar](255) NULL)

¡Ya lo tenemos todo listo para realizar la exportación! En la consola de comandos de Hadoop escribimos la sentencia (Recordad, sustituir SERVERNAME por el nombre de vuestro servidor e INSTANCENAME por el nombre de vuestra instancia de SQL Server y DATABASENAME con el nombre de la base de datos destino):

sqoop export --connect "jdbc:sqlserver://SERVERNAMEINSTANCENAME:1433;databaseName=DATABASENAME;integratedSecurity=true" --table "Clientes" --export-dir "/apps/hive/warehouse/clientes/" --input-fields-terminated-by ","

Los argumentos –conect –table –export-dir son obligatorios.

–table: especifica el nombre de la tabla destino, donde vamos a exportar los datos.

–export-dir: especifica el directorio en HDFS que contiene los datos fuente.

–input-fields-terminated-by: indica el caracter por el cual se separan los campos en la tabla.

Como aclaración, en este caso hemos especificado una tabla Hive como origen, pero podemos tener un directorio en HDFS que contenga datos, con una misma estructura, y exportemos dichos datos a una tabla en SQL Server. Es indispensable que los datos tengan la misma estructura, ya que SQL Server o cualquier otro sistema de gestión de bases de datos son sistemas estructurados. De no tener los datos fuente la misma estructura, la exportación nos daría error y no se realizaría correctamente.

 

Post anteriores relacionados con Sqoop: