Skip to main content
Sqoop

Sqoop: Poblando Hadoop desde RDBMS

Tiempo de Lectura: 4 minutos

Una de las principales fuentes del Big Data son la bases de datos relaciones, en una organización pueden existir millones de registros en distintas tablas, transacciones por segundo o incluso muchos años de historia. Lo más probable es que no se exploten dichos datos y no se beneficien del gran potencial que tienen en su poder, pues procesar tal cantidad de datos con sistemas tradicionales es un gran reto.

Este es uno de los principales usos del Big Data, donde las organizaciones pueden contar con mucha historia almacenada esperando ser analizada en Hadoop (Map Reduce, Machine Learning, Predictive, etc). Es por eso que Hadoop cuenta con una herramienta llamada Sqoop la cual te permite transferir datos desde distintos RDBMS a Hadoop y de Haddop a RDBMS.

 

¿Qué es Sqoop?

Sqoop es una herramienta cuya principal funcionalidad es transferir datos entre bases de datos relacionales o Data Warehouse y Hadoop. Sqoop automatiza la mayor parte de los procesos de transferencia, basándose en la base de datos para describir el esquema de los datos a importar, además para su funcionamiento utiliza MapReduce para importar y exportar los datos, lo que proporciona una operación en paralelo, así como tolerancia a fallos.

Sqoop le permite a los usuarios especificar la ubicación de destino dentro de Hadoop (pueden tablas Hive o HBASE) e instruir a Sqoop para mover datos de Oracle, Sql Server, Teradata u otras bases de datos relacionales al destino.

 

¿Cómo Trabaja Sqoop?

Sqoop funciona como una capa intermedia entre las bases de datos relacionales y Hadoop:

Sqoop

Import Sqoop

Sqoop escribe desde las tablas o consultas Sql específicas registro por registro paralelamente, por lo cual el resultado pueden ser múltiples archivos almacenados en HDFS con una copia de los datos importados. Estos archivos podrían ser txt separados por comas o tabulaciones, binarios Avro o SequenceFiles

Import Sqoop
Fuente: bigdatariding

 

Argumentos Comando Import

Al ver la siguiente lista de argumentos para realizar la importación, podemos ver que el proceso inicial no es del otro mundo y utiliza casi la misma estructura que si estuviéramos realizando una conexión a una base de datos específica desde cualquier lenguaje de programación, adicionándole por supuesto los datos de Hadoop:

Command Import

Por ejemplo:

Importando desde Mysql

$ sqoop import –connect jdbc:mysql://database.example.com/employees –username jacagudelo –password 678456

Importando desde SQl Server

$ sqoop import –driver com.microsoft.jdbc.sqlserver.SQLServerDriver –connect <connect-string> …

 

Seleccionando datos a importar

Generalmente Sqoop selecciona todos los campos de la tabla o vista origen a importar manteniendo el orden natural de los mismos.

$ sqoop import   –query ‘SELECT a.*, b.* FROM a JOIN b on (a.id == b.id) WHERE $CONDITIONS’ –split-by a.id /

–target-dir /user/foo/joinresults

 

Donde guarda los datos importados?

Por defecto Sqoop almacena los archivos de la importación en el directorio /foo dentro del directorio principal del sistema HDFS. Por ejemplo si el usuario utilizado es jacagudelo, Sqoop dejará los archivos de los resultados en la ruta /usr/jacagudelo/foo/(files).

Para ajustar este valor podemos hacer lo siguientes:

$ sqoop import –connnect <connect-str> –table emp –target-dir /dest

 

Export Sqoop

La herramienta de exportación exporta un conjunto de archivos de HDFS a un RDBMS. Los archivos dados como entrada a Sqoop contienen registros, que se llaman como filas en la tabla. Éstos se leen y analizan en un conjunto de registros y se delimitan con el delimitador especificado por el usuario.

Export Sqoop
Fuente: bigdatariding

Argumentos Comando Export

Command Export

Los principales parametros  utilizar son – – export-dir el cual especifica el directorio en HDFS que contiene los datos de los archivos y  – – table o – – call que identifican respectivamente la tabla destina o procedimiento almacenado a ejecutar.

Algo a tener en cuenta al momento de exportar es que Sqoop toma por defecto todas las columnas, pero podremos especificar columnas puntuales con el comando – – columns delimitándolas por comas. La advertencia aquí es que las colummnas que no se eincluyan en el proceso serán enviadas con valor NULL por defecto por lo que si la tabla destino no tiene configurado dicho permiso terminará generando error el proceso Sqoop.

Por ejemplo:

$ sqoop export –connect jdbc:mysql://db.example.com/foo –table retail –export-dir /results/bar_data

 

Sqoop por defecto realiza un append en la tabla de destino, en esencia realiza un insert sobre cada registro. Al igual que con los campos en el caso anterior, las tablas destino podrían tener Primary Key con los cual podrían generar error de duplicidad. Este modo está destinado principalmente a exportar registros a una nueva tabla vacía destinada a recibir estos resultados.

En caso de que el destino sea una tabla existente, debemos adicionar el parámetro – – update – key donde Sqoop realizará la modificación del conjunto de datos existente en la base de datos destino. Cada registro de entrada se tratará como una instrucción UPDATE que modifica una fila existente. La modificación de la fila se determina por el nombre de columna especificado como llave –update-key.

Si ejecutamos el comando:

$ sqoop export –table bar –update-key id  –connect jdbc:mysql://db.example.com/foo  –export-dir /results/bar_data

Internamente el Job de Sqoop realizará lo siguiente:

UPDATE foo SET msg=’this is a test’, bar=42 WHERE id=0;

UPDATE foo SET msg=’some more data’, bar=100 WHERE id=1;

 

Tipos de Destino en Hadoop

Una de las principales virtudes de Hadoop es que nos brinda una gran variedad de proyectos disponibles para usar de acuerdo a nuestras necesidades, para este caso puntual contamos con 3 proyectos específicos:

  • Hive: Como vimos en el artículo Hive nos proporciona un ambiente de Data Warehouse sobre Hadoop con su propio lenguae de consulta  muy similar al SQL, lo cual nos vendría conveniente al querer explorar nuestros datos.
  • HBase: HBase es una base de datos no relacional que nos permite realizar búsquedas rápidas de baja latencia en Hadoop. Agregar capacidades transaccionales a Hadoop, permitiendo a los usuarios realizar actualizaciones, inserciones y eliminaciones.
  • Accumulo: Aunque muy poco conocida pero no menos importante, tenemos esta base de datos NoSql de tipo Key-Column la cual podemos utilizar a nuestras necesidades.

 

Conclusión sobre Sqoop

Como acabamos de ver, Sqoop es una poderosa herramienta para poblar desde nuestras bases de datos relacionales y evolucionar nuestros proyectos analíticos, con sus comandos podemos trasladar nuestros datos, analizarlos mediante cualquier otra herramienta como Pig o Hive sobre Hadoop y volver a retornar el resultado a nuestras bases. Una funcionalidad muy práctica y eficaz para nuestros proyectos.


¿Qué te pareció Sqoop? ¿Consideras que debe ser tenido en cuenta en una solución Big Data con Hadoop?

 

Hive_Hadoop

Hive: SQL y Data Warehouse en Hadoop

Tiempo de Lectura: 5 minutos

 

Gracias al auge del procesamiento de grandes bancos de datos que demandan hoy en día las organizaciones, es normal imaginarse si en éste nuevo mundo escalable y distribuido de Hadoop es posible realizar consultas SQL. Hive es una solución de Hadoop la cual te solucionará éste tipo de preguntas y muchas más.

 

 

Que es Hive?

Uno de los grandes desafíos actualmente es disponer de herramientas que permitan poder explotar grandes cantidades de datos fácilmente y sin generar mucho impacto en aprendizaje como por ejemplo con Pig.

Precisamente Hive es un framework que nos permite manipular fácilmente grandes cantidades de datos debido a que posee su propio leguaje de consultas llamado HQL (HiveQL) basado en SQL. HQL convierte las consultas a trabajos Map Reduce podemos realizar consultas sobre datos almacenados en un cluster Hadoop.

De la mano con el fácil acceso a consultas, Hive provee un entorno de Data Warehouse sobre ambientes distribuidos el cual te permite crear la estructura de las tablas que necesitas.

Hive es particularmente útil para aplicaciones de data warehouse, donde los datos relativamente estáticos son analizados, no se requieren respuesta rápidas y los datos no cambian rápidamente. Debido a que hadoop está diseñado con HDFS representa una limitación para Hive, no soporta update (refresh), inserción o borrado a nivel de registros.

Como hemos visto, hadoop está orientado a procesamiento batch por lo que las consultas de Hive tienen una mayor latencia, aunque sean para conjuntos de pocos datos. Además Hive no posee transacciones así que es más una herramienta OLAP.

Cómo funciona Hive?

Cuando implementamos un algoritmo como Word Count en Hadoop usando Hadoop Java API, hay más detalle de bajo nivel de los que podríamos manejar fácil e intuitivamente. Es un trabajo apropiado para un desarrollador Java experimentado. De hecho, esos detalles de bajo nivel son algo repetitivos entre un trabajo y otro, como enganchar mappers y reducer a ciertos datos, filtrar determinados datos y realizar uniones SQL a ciertos conjuntos.

En este punto es donde entra Hive, además de proveer un modelo de programación familiar para los que sabemos SQL, también elimina muchos trucos de Java!. Es por eso que Hive es tan importante para Hadoop ya que permite completar muchos trabajos ahorrando mucho esfuerzo.

Hive proporciona una funcionalidad básica de SQL estándar mediante HQL. Una vez escrita el query es traducida a un proceso MapReduce que será ejecutado sobre el clúster HDFS. Para nosotros esto será transparente, ahora nos debemos centrar en los datos disponibles y de la información que queremos sacar. La sintaxis básica que acepta Hive comprende lo siguiente:

  • CREATE/ALTER/DROP TABLE/DATABASE
  • INSERT INTO SELECT
  • FROM … JOIN … ON WHERE
  • GROUP BY
  • HAVING
  • ORDER BY
  • LIMIT

Tipos de datos en Hive

Precisamente unos de los fuertes de Hive es permitirte procesar y analizar mucha información y de diferentes tipos de datos, que por cierto son muy similar a un motor de base de datos:

Tipos de datos simples

  • TINYINT:1 byte para números enteros con signo.
  • SMALLINT:2 bytes para números enteros con signo.
  • INT:4 bytes para números enteros con signo.
  • BIGINT:8 bytes para números enteros con signo.
  • FLOAT:4 bytes para números en coma flotante.
  • DOUBLE:8 bytes para números en coma flotante.
  • TIMESTAMP:almacenar fecha y hora
  • DATE:almacenar fechas
  • STRING
  • VARCHAR
  • CHAR
  • BOOLEAN
  • BINARY

 Tipos de datos complejos

Muy útiles para almacenar colecciones de datos de tipos simples.

  • ARRAY
  • MAP
  • STRUCT
  • UNIONTYPE

Características de Hive

  • Provee facilidad de data warehouse sobre un cluster Hadoop
  • Está diseñado para OLAP
  • Provee un lenguaje de consultas llamado HQL (Hive QL), muy similar al SQL, mediante el cual se pueden escribir fácilmente tareas MapReduce y explotar los datos guardados en el cluster
  • Puede utilizar Spark para su ejecución
  • Al estar montado en Hadoop utiliza de igualmodo el HDFS para su almacenamiento
  • Permite manejar datos estructurados con tipos de datos ricos tales como (structs, lists y maps)
  • Al igual que Pig, permite el uso de scripts embebidos para extensibilidad y aplicaciones no estándares
  • Utiliza el metadata para permitir el descubrimiento de datos y optimización

Hive vs Pig

Supongamos que tenemos varias fuentes de datos de entrada y necesitamos realizar un número complejo de transformaciones para generar una salida. Usando Hive es posible realizar realizar lo anterior utilizando querys andadas similares a las de SQL, pero  en algún punto será necesario utilizar tablas temporales.

Pig, en cambio, es un lenguaje de flujo de datos, y no un lenguaje de consultas. En Pig es común escribir una serie de declaraciones que definen relaciones a partir de otras relaciones, donde cada nueva relación va realizando una transformación a los datos. Pig interpreta éstas declaraciones y a partir de ellas crea rutinas MapReduce para efectuar dichas transformaciones, hasta llegar al resultado deseado. En este sentido es que se dice que Pig es un lenguaje de flujo de datos.

Una desventaja de Pig es que utiliza un lenguaje especial que no está basado en SQL, esto es porque no está diseñado como un lenguaje de consulta pero a su vez nos dice que no es el indicado para aplicaciones SQL y que los usuarios experimentados en SQL tendrán una curva de aprendizaje Pig mucho más grande.

Es importante enfatizar que Pig  y Hive no son excluyentes. Es muy común para los equipos de científicos y arquitectos de datos utilizar una combinación óptima de Pig y Hive, seleccionando la herramienta adecuada para cada tarea.

Hive vs HBase

Como mencionábamos anteriormente Hive no provee muchas de las características de una base de datos, como por ejemplo, refrescos a nivel de filas, tiempos rápidos de consultas, ya transacciones. ¿Pero qué sucede si, dados los requerimientos necesitamos de éstas características? Aquí entra HBase como una alternativa muy interesante.

HBase es un repositorio distribuido y escalable de datos que soporta todas las características mencionadas anteriormente. Estás inspirado en Big Table de Google, pero no implementa todas sus características. Una de sus propiedades principales es que el almacenamiento es orientado a columnas, donde las columnas son organizadas en familias (Column Family). Estas familias de columnas son almacenadas físicamente juntas  en un cluster distribuido, lo que garantiza que la lectura/escritura sean mucho más rápidas que los tiempos típicos de SQL.

¿Pero cuál es la relación entre HBase y Hadoop? HBase puede usar HDFS, pero a su vez HBase no provee un lenguaje de consultas como SQL, pero hoy día Hive está completamente integrado a HBase, lo que resulta una combinación muy potente para ciertas aplicaciones.

Tipos de aplicaciones Hive

  • Sumarización
    • Ej: agregaciones diarias de impresiones y clicks
  • Métricas complejas de involucramiento de los usuarios
  • Análisis Ad Hoc
  • Data Mining
  • Detección de Spam
  • Optimización de publicidades

Conclusión

No queda duda que es uno de esos proyectos que debes tener presente a la hora de implementar una solución Hadoop, por supuesto una vez analizados los requerimientos iniciales pero si en algún punto comprende el SQL no queda la menor duda, además ten presente lo conveniente que vendría para ti combinar Hive con otro proyecto como se mencionó anteriormente, explotar todo su potencial te facilitara a ti y a los analista muchas tareas!

 


Ya habías escuchado sobre Hive? Consideras que una parte fundamental en soluciones Big Data es tener la posibilidad de explorar amigablemente los datos? Combinarías algún otro proyecto con Hive?

Haz parte de mi Newsletter
I agree to have my personal information transfered to MailChimp ( more information )
Únete y haz parte como otros visitantes que reciben semanalmente mi newsletter con noticias y artículos actualizados sobre Business Intelligence y Big Data.
Al igual que tú, no tolero el SPAM. Tu dirección de email no será compartida.