Skip to main content
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
Ú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.
Especialista en Business Intelligence con experiencia en herramientas como Pentaho, Microsoft y Microstrategy. Inmerso en Big Data, las Nuevas Tendencias, el Futbol y la Música.
Pig_Hadoop_Blog_Jacagudelo

Pig Hadoop: Devorando datos

Tiempo de Lectura: 6 minutos
Como vimos en el artículo del ecosistema Hadoop podemos encontrar distintos proyectos para realizar consultas, trabajar con bases de datos y hasta realizar estudios de machine learning entre otros. Por eso en éste artículo hablaremos de Pig, un proyecto de código abierto de Apache, que ofrece un lenguaje de alto nivel para el análisis de flujo de datos dentro de un entorno de ejecución en paralelo como Hadoop.

¿Qué es Pig Hadoop?

Pig es una plataforma de scripting desarrollado originalmente por Yahoo! en el 2006 y fue adoptado un año después por Apache Software Foundation para convertirse en un subproyecto de Apache.

Pig provee un lenguaje de alto nivel para crear flujos de datos llamado Pig Latin el cual permite realizar programas MapReduce de forma simple y en pocas líneas de código. La gran ventaja es que no es necesario saber programar en Java, pues Pig posee dentro de su infraestructura un compilador capaz de producir secuencias MapRecude, lo que permite a los usuarios Hadoop enfocarse más en el análisis de los datos que el desarrollo mismo de los programas.

La gran ventaja que tiene Pig con Pig Latin los scripts pueden ser ampliados utilizando funciones definidas por el usuario (UDF) en distintos lenguajes tales como Java, Ruby, Python, JavaScript y Groovy.

Su nombre nos dice mucho de lo que es capaz, Pig puede trabajar con datos de cualquier origen, incluyendo estructurados y no estructurados, y almacena los resultados dentro del Data File System de Hadoop. Los scripts de Pig son trasladados en series de Jobs MapReduce los cuales se ejecutan dentro del cluster Hadoop.

Como se mencionó Pig corre sobre Hadoop haciendo uso del sistema HDFS y del sistema de procesamiento MapReduce. La ventaja de Pig es que es un entorno de alto nivel, donde los usuarios disponen de estructuras y funciones predefinidas que son posibles de usar directamente o combinar para escribir código muy complejo en forma muy sencilla.

¿Qué es Pig Latin?

Pig Latin es un lenguaje de flujos de datos que trabaja en paralelo. Lo que quiere decir que permite a los programadores describir cómo los datos provenientes de una o más entradas deben ser leídos, procesados y luego almacenados a uno o más flujos de salida en paralelo.

La sintaxis de Pig Latin es muy similar a la de SQL, aunque Pig Latin es un lenguaje de transformación de datos y, por lo tanto, es similar a los optimizadores de consultas de base de datos de los sistemas de bases de datos actuales.

Escribir programas MapReduce en Java puede consistir en más de cien líneas de código, según la complejidad de los mismos, mientas que los scripts de Pig Latin comúnmente no toman más de 10 líneas de código.

Pig Latin incluye operadores para muchas operaciones tradicionales tales como Join, Sort, Filter , etc. Como así también la capacidad de permitir a los usuarios definir sus propias funciones para leer, procesar y escribir datos.

Veamos algunos operadores:

ComandosPig

¿Cómo funciona Pig Latin?

Uno de los principales objetivos de Pig es que Pig Latin sea el lenguaje natural para los entornos de procesamientos de datos paralelos como Hadoop, ya que Pig en si ofrece varias ventajas sobre el uso de MapReduce directamente.

La programación en Pig tiene al menos 3 pasos:

  1. El primer paso en un programa Pig es cargar los datos que desea manipular desde HDFS.
  2. A continuación, ejecuta los datos a través de un conjunto de transformaciones (que, bajo las cubiertas, se traducen en un conjunto de tareas de asignación y reductor en MapReduce).
  3. Finalmente, DUMP para ver los datos de resultado en pantalla o STORE para almacenar los resultados en un archivo en alguna parte.

 

Veamos un ejemplo del script en Pig

Se requiere encontrar las páginas más visitadas del blog por usuarios con edades entre los 17 y los 23 años.


# Users = load  ‘users’  as (name,age);
 
# Filter = filter Users by age >=17 and age <= 23;
 
# Pages = load ‘pages’ as (user,url);
 
# Jnd = join Filter by name, Pages by user;
 
# Grpd = group Jnd by url;
 
# Smmd = foreach Grpd generate group, COUNT(Jnd) as clicks;
 
# Srtd = order Smmd by clicks desc;
 
# Top5 = Limit srtd 5;
 
# store Top5 into ‘top5sites’;

En la primera línea del script cargamos el archivo de los usuarios declarando los datos con 2 variables (nombre y edad). Asignamos la información del usuario al input.

En la segunda línea aplicamos un filtro a los usuarios cargados que tenga la edad entre 17 y 23 años, inclusive. Todos los demás registros serán descartados así quedan solo los rangos de edad de interés. El resultado de ésta operación se almacena en la variable Filter.

Realizamos nuevamente un Load para cargar la información de las páginas visitadas con los respectivos nombres, declarando su esquema con las variables usuario y url.

En la siguiente línea realizamos una unión con Join entre Filter y Pages usando Filter.name y Pages.user como clave. Después de esta unión obtendremos todas las Urls visitadas por cada usuario.

La línea del Grpd recoge todos los registros por Url definiendo un solo registro por cada Url.

Luego con Smmd cuenta cuantos registros están recolectados junto juntos por cada Url. De forma tal que luego de esta línea sabremos, por cada Url, cuántas veces fue visitada por usuarios entre 17 y 23 años.

Ordenamos desde las más visitadas a la menos visitada con Srtd order, considerando el valor contado de la línea anterior y ordenamos por desc.

Limitamos los valores ordenados a sólo 5 resultados.

Finalmente almacenamos el resultado en HDFS en el archivo top5sites.

 

En Pig Latin podemos resolver problemas en 9 líneas de código y al menos 15 minutos. El mismo código en MapReduce podría llevar unas 170 líneas de código y tomar cerca de 4 horas para completar las tareas.

 

Ventajas de Pig Latin

  • El uso de operadores como Join, Filter, Group by, Order, ect, los cuales en MapReduce resultan muy costosos.
  • Puede operar con cualquier tipo de datos (estructurado, semi-estructurado o no estructurado).
  • Diseñado para ser fácilmente controlado y modificado por los usuarios, permitiendo agregar funciones definidas de diferentes lenguajes.
  • Permite ejecutar tareas MapReduce fácilmente.
  • Procesa datos rápidamente. La intención es mejorar el rendimiento y no las funcionalidades, lo que evita ue demasiada funcionalidad le impida “volar”.
  • Permite ejecución customizable por el usuario.

 

¿Cómo podríamos usar Pig?

Pig generalmente es usado para realizar tareas que involucran procesamiento de grandes bancos de datos pensando resultados en poco tiempo.

Un uso muy común es procesar grandes fuentes de datos como los registros web, podríamos capturar las interacciones de los usuarios en un sitio web y dividir alos usuarios en varios segmentos, así, podríamos realizar modelos predictivos para cada segmento de manera que podamos predecir a que tipos de anuncios o noticias responden mejor cada uno y poder mostrar solo los anuncios que sean más propensos a hacer clic o publicar noticias con as posibilidades de atraer a los usuarios.

También es usado comúnmente para procesos ETL debido a que permite analizar flujos de datos con operadores muy sencillos como agrupación, unión y agregación. Ya que los datos pueden ser presentados en diversos formatos, necesitan ser procesados y almacenados en una base de datos para posteriormente ejecutar queries sobre ellos. Pig además permite paralelización gracias a Hadoop y aunque diversas herramientas ETL permiten descomponer los procesos en pequeños segmentos, los scripts de Pig son aún más simples y fáciles de entender.

Haz parte de mi Newsletter
Ú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.

Sin embargo, esto no indica que Pig sea un reemplazo de una herramienta de ETL, puesto que además de que no provee funcionalidades específicas de un ETL (y que no fue desarrollado para tal fin), el uso de Pig para todos los procesos de ETL sería una exageración cuando los datos razonablemente pueden manejarse en una instancia de base de datos.

 

Conclusión sobre Pig

Como vimos Pig es una herramienta increíblemente potente, no solo por permitir el procesamiento de cualquier tipo de datos si no porque además permite paralelizar los procesos lo que nos da una ventaja al poder procesar muchos más datos que en una herramienta ETL tradicional. Sus scripts son mucho más cortos, sencillos y potentes que MapReduce permitiendo el uso de funciones personales lo que da una mayor funcionalidad y versatilidad, sin duda una herramienta a tener presente a la hora de analizar o proponer una solución Big Data…eso sí, debes contemplar el tiempo de capacitación y adaptación a la misma.

 


¿Qué te pareció Pig? ¿Consideras que debe ser tenido en cuenta en una solución Big Data con Hadoop? ¿Crees que puede reemplazar una herramienta ETL?

Especialista en Business Intelligence con experiencia en herramientas como Pentaho, Microsoft y Microstrategy. Inmerso en Big Data, las Nuevas Tendencias, el Futbol y la Música.