RSS

Introducción a Hive

29 Ago

hive_logo_mediumLa primera librería relacionada con Hadoop de la que vamos a hablar en este blog va a ser Apache Hive. De la web oficial del proyecto Apache Hive:

Hive es un sistema de almacén de datos que facilita el manejo sencillo de datos, consultas ad-hoc, y el análisis de grandes conjuntos de datos almacenados en sistemas de ficheros compatibles con Hadoop. Hive provee un mecanismo para dotar de estructura en los datos y realizar consultas sobre los mismos con el lenguaje tipo SQL llamado HiveQL. Al mismo tiempo este lenguaje también permite a los programadores de Map/Reduce incluir sus propios mappers y reducers cuando no sea conveniente o eficiente expresar esta lógica con HiveQL.

Se puede leer estas mismas entradas en mi otro blog java4developers.com

Características principales de Hive

Algunas de las principales características de Hive y de su lenguaje HiveQL son las siguientes:

  • HiveQL es un lenguaje tipo SQL que permite realizar consultas de grandes volúmenes de datos almacenados en un sistema de ficheros compatible con Hadoop.
  • Las consultas realizadas desde HiveQL se ejecutan siguiendo el modelo Map/Reduce.
  • Hive necesita almacenar metadatos y los esquemas de datos mediante un servicio metastore.
  • Sin embargo, el programador no necesita HiveQL ningún maper o reducer lo que agiliza el desarrollo. Hive se encarga de traducir la consulta escrita con HiveQL en tareas Map/Reduce.
  • Además Hive permite que el programador pudiera escribir sus propios mares y reduces si fuera necesario
  • HiveQL no permite inserción, actualización o borrado de datos a nivel de registro. Tampoco dota de transaccionalidad a sus consultas.
  • Sin embargo si permite crear tablas y insertar datos que están almacenados en el sistema de ficheros de Hadoop.
  • La latencia de las consultas suele ser mayor que las realizadas en las bases de datos relacionales debido a la inicialización de Map/Reduce.
  • Schema on read vs schema on write. A diferencia de las bases de datos relacionales que garantizan que el schema se cumple cuando se inserta un registro, Hive no garantiza esto aunque intenta garantizar el esquema en las lecturas.

Comenzar con Hive

Lo primero que tenemos que tener en cuenta antes de comenzar con Hive es que necesitamos tener instalado Hadoop en nuestro sistema. Para ello lo mejor es seguir la guía de la página del proyecto de Apache Hadoop. Cuando configuramos Hadoop podemos definir en que modo queremos correr las tareas Map/Reduce, como un cluster de un sólo nodo, un cluster pseudodistribuído ó cluster distribuido. Además se pueden configurar otra serie de variables. Hay que tener en cuenta que aunque podemos definir nuestra propia configuración más tarde en Hive, la configuración será compartida con la de Hadoop. Por lo que si hay algo que no te cuadra cuando comiences a usar Hive te recomiendo que mires también el valor de las variables que hayas puesto en los ficheros de configuración de Hadoop. Podemos ver todas las variables tanto de Hive como de Hadoop a través del comando set a través de la consola de comandos de Hive.

El siguiente paso será descargar Hive e instalarlo en tu máquina. Uno de los mayores quebraderos de cabeza que he tenido al comenzar con Hive es estar seguro que es compatible con la versión de Hadoop que estamos usando. Una de las cosas que podemos hacer para evitar esto es bajar distribuciones comerciales  (aunque también las hay gratuitas) donde tenemos incluidas versiones compatibles de Hadoop y Hive así como otras librerías como ZookeeperPigSqoop ó Oozie. Las distribuciones más utilizadas actualmente son las de ClouderaHortonworks y MapR. Sin embargo creo que es mejor descargarse el proyecto directamente de la página oficial del proyecto Apache Hive y ponerse a trastear con él. Además hay una guía que facilita bastante las cosas siguiendo este enlace.

Una vez instalado Hive la manera más fácil de comenzar es a través de la línea de comandos. Hive dispone de un cliente que permite ejecutar sentencias con HiveQL. Lo primero que haremos será cargar un fichero de datos local al sistema de ficheros que utilice Hadoop.

Para ello arrancaremos la consola desde el terminal con el comando hive y crearemos una tabla donde cargar más adelante los datos.

hive> CREATE TABLE pokes (foo INT, bar STRING);

Cargaremos los datos (hay varios ficheros disponibles en la carpeta examples de la instalación) usando el comando LOAD.

hive> LOAD DATA LOCAL INPATH './examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;

Podemos ejecutar consultas sobre los datos cargados de manera similiar a una consulta SQL.

hive> SELECT * from pokes;

Si nos fijamos en los logs que salen por consola podemos ver como se ejecutan tareas Map/Reduce para resolver la consultas.

hive-query-console

Fijaos que para realizar una simple query se ha tardado casi 1 minuto. Evidentemente no son este tipo de consultas para el juego de datos que tenemos las que están pensadas para utilizar en Hive.

Desde la consola de administración del jobtracker de Hadoop podemos realizar un seguimiento a cada tarea.

hive-job-jobtracker

Enlaces interesantes

 
Deja un comentario

Publicado por en 29 agosto, 2013 en Big Data, Hadoop

 

Etiquetas: , ,

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: