Está en la página 1de 19

Introducción a Apache Hive, el

datawarehouse de Hadoop
0. Índice de contenidos.
 1. Introducción.
 2. Entorno.
 3. Instalación.
 4. Tipos de datos.
 5. Cargar los datos en HDFS.
 6. Procesar los datos en Hive.
 7. Conclusiones.

1. Introducción.
Apache Hive es un framework originalmente creado por Facebook que sirve para
trabajar con el HDFS – Hadoop Distributed File System que nos facilita
enormemente el trabajo a la hora de trabajar con los datos. Su funcionamiento es
sencillo, a través de querys SQL (HiveQL) podemos lanzar consultas que serán
traducidas a trabajos MapReduce. Ya vimos en el otro Ejercicio que resulta
laborioso programar algoritmos MapReduce, sobre todo si el problema de datos
es complejo. Hive nos facilita enormemente este trabajo ya que traduce consultas
tipo SQL a trabajos MapReduce paralelizables contra el dataset en un entorno
completamente distribuido.

Aunque Hive no es una base de datos lo cierto es que sí lo parece ya que para
trabajar con los datos debemos crearnos un esquema, definir la tabla con sus
columnas y tipo de dato de cada una de ellas, hacer la carga de los datos inicial y
posteriormente realizar las consultas para recoger lo que nos interese. Por todo
ello se conoce como el componente datawarehouse de Hadoop.
Tiene como inconveniente que al necesitar procesar la query y traducirla a
lenguaje Java para crear el job MapReduce, la latencia de respuesta es alta.
Tampoco soporta todo el lenguaje SQL, transacciones ni índices.

En este tutorial vamos a ver unos primeros pasos para ver cómo trabajar con Hive
trabajando con un dataset de datos públicos lanzando algunas queries y
mostranso los resultados.

2. Entorno.
El tutorial se ha realizado con el siguiente entorno:

 Laptop Dell 17′ (Core i7, 16GB DDR3 SDRAM).


 VirtualBox
 Hadoop Cloudera

3. Instalación
Si utilizas la máquina virtual de Cloudera Hadoop ya viene instalada una versión
de Hive. Si decides instalarlo en tu máquina tendrás que descargar el binario de
hive de la web oficial, descomprimir y crear la variable de
entorno HIVE_HOME en él .bashrc apuntando al directorio de instalación.
Añadir también la variable creada al PATH.

1 tar -xzvf apache-hive-0.14.0-bin


1 export HIVE_HOME=/usr/local/hive
2 export PATH:$PATH:$HIVE_HOME/bin

4. Tipos de datos.
En Hive los datos se pueden representar de diferentes tipos, muy similar a un
motor de base de datos:

Tipos 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 complejos: muy útiles para almacenar colecciones de datos de tipos


simples.

 ARRAY
 MAP
 STRUCT
 UNIONTYPE

Hive proporciona una funcionalidad básica de SQL estándar. Una vez escrita la
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 sintáxis básica que
acepta Hive comprende lo siguiente:

 INSERT INTO SELECT


 FROM … JOIN … ON WHERE
 GROUP BY
 HAVING
 ORDER BY
 LIMIT
 CREATE/ALTER/DROP TABLE/DATABASE

5. Cargar los datos en HDFS.


Como decíamos en la introducción, Hive posee un lenguaje para la definición de
datos llamado HiveQL. Es muy similar al SQL estándar y con él podemos
crearnos el schema con el que trabajar, crear/borrar las distintas tablas, columnas,
tipos de datos de las columnas, vistas, particiones, funciones, permisos y muchas
cosas más.

Vamos a ir viendo todo esto de forma práctica con una fuente de datos que he
descargado del Portal de Datos Abiertos del Ayuntamiento de Madrid.
Concretamente voy a utilizar un dataset que muestra los accidentes en bicicletas
o en automóvil desde el año 2010 al 2018. Puedes descargarlo por años desde el
siguiente link, y luego unirlos en un solo archivo .csv.
(https://datos.madrid.es/portal/site/egob/menuitem.c05c1f754a33a9fbe4b2e4b284f1a5a0/?
vgnextoid=20f4a87ebb65b510VgnVCM1000001d4a900aRCRD&vgnextchannel=374512b9ace9f

310VgnVCM100000171f5a0aRCRD&vgnextfmt=default ). El fichero está en formato .csv.

Este dataset contiene unas 5525 líneas con los apuntes de accidentes en bicicleta
clasificados por:

LUGAR
FECHA RANGO HORARIO DIA SEMANA DISTRITO ACCIDENTE
TIPO ACCIDENTE Tipo Vehiculo TIPO PERSONA SEXO LESIVIDAD Tramo Edad

, etc. Abrirlo directamente no dice gran cosa por lo que vamos a procesarlo con
Hive para extraer la información más relevante.

Una vez descargado el dataset, debemos importarlo a la Cloudera Hadoop.

Pero antes de este procedimiento, vamos a realizar una modificación a la


presentación de la pantalla de nuestro virtualizado Cloudera hadoop, visto que el
tamaño de la pantalla es muy pequeño e impide una navegación por toda la
ventana de hive – hue. La siguiente imagen, muestra el tamaño inicial al cargar
Cloudera hadoop.

Para visualizarlo en toda la pantalla o en una mayor resolución, debemos realizar


lo siguiente:
- Seleccionar el menú: VER (seleccione la resolución que necesita)
Quedando finalmente la pantalla como muestra la siguiente imagen:

Donde podremos desplazarnos sin problemas.


Ahora, continuamos con el desarrollo de nuestro ejercicio.
Para ello entramos con el navegador a la interfaz del ‘Hue’ que nos habilita
varias herramientas disponibles. Concretamente accedemos a la opción ‘File
browser’.
Dentro de la ventana del ‘File browser’ a la derecha aparece la opción ‘Upload’
y al desplegar seleccionamos ‘Files’

Previamente, ha tenido que copiar el archivo .csv:


AccidentesBicicletas_2010_2018.csv, de su carpeta local de Linux a la ruta de su
HDFS, que podría ser por ejemplo a la ruta: /user/cloudera/input (debes crear la
carpeta: input).

Desde esa opción podemos subir el archivo .csv de los datos de los accidentes en
bicicletas (2010_2018), en este ejercicio yo tengo el archivo de datos en la ruta
local de linux: /home/cloudera/Downloads/data_accidente/
AccidentesBicicletas_2010_2018.csv. Una vez subido nos aparecerán en la tabla
con el nombre AccidentesBicicletas_2010_2018.csv. como se muestra en la
siguiente imagen:
Si todo ha ido bien tendremos los datos subidos al filesystem de Hadoop.
Pinchando en el enlace de la tabla accedemos a los datos.

6. Procesar los datos en Hive.


Para sacarle partido a los datos de los que disponemos vamos a crear una base de
datos en Hive con una tabla accidentes, posteriormente cargaremos los datos del
archivo. Aunque todas las sentencias se pueden ejecutar por línea de comandos
resulta muy cómodo utilizar el interfaz web del Query Editor de Hive.

Lo encuentra en la siguiente ruta:


Editar de Query – Hive:

Crear la base de datos

Lo primero será crear la base de datos donde almacenar los datos del fichero.
1 create database accidentes_bicicleta;

Podemos comprobar si se ha creado correctamente:

1 show databases;
Crear la tabla

Ahora vamos a crear una tabla para proporcionar estructura a los datos del
fichero. La sintaxis es muy parecida a la de SQL, se le indica el nombre de la
columna y el tipo de datos. Para este ejemplo sólo voy a crear una tabla, pero
viendo los datos se podría normalizar y sacar varias tablas que clasificaran aún
más los datos de los que disponemos.
Podemos utilizar la siguiente sentencia para crear una tabla:
create table if not exists accidentes
(
fecha string
rango_horario string
dia_semana string
distrito string
lugar accidente string
nro bigint
1
nro_parte string
2
cpfa_granizo string
3
cpfa_hielo string
4
cpfa_lluvia string
5
cpfa_niebla string
6
cpfa_seco string
7
cpfa_nieve string
8
cpsv_mojada string
9
cpsv_aceite string
10
cpsv_barro string
11
cpsv_grava_suelta string
12
cpsv_hielo string
13
cpsv_seca_limpia string
14
nro_victimas bigint
15
tipo_accidente string
tipo_vehiculo string
tipo_persona string
sexo string
lesividad string
tramo_edad string
)
row format delimited fields terminated by ';'

Una vez ejecutada podemos comprobar si la ha creado desde la pestaña ‘Tables’:


Pero, a modo de ejemplo, vamos a crearlo desde la parte gráfica de Hue, de la
siguiente manera:
1° Verificar de haber seleccionado la base de datos creada.

2° Seleccionar el icono + de la imagen anterior.

3. Como vamos a crearlo desde el archivo .csv cargado en nuestro HDFS,


debemos seleccionar la opcion: FILE, y luego en PATH, para especificar la ruta
donde se encuentra el archivo.

En esta ventana, seleccione el archivo de la ruta donde se encuentre.


4° Regresará a la pantalla anterior, donde se visualizará de la siguiente manera:

En esta ventana, deberá indicar el “Field Separator”, para nuestro caso el


archivo .CSV, está separado por “;”, deberá digitarlo y adicionarlo “ADD”.

Seguidamente, aparecerá los datos del archivo .csv en formato tabla.

Para continuar, seleccione el botón Next, que mostrara la siguiente pantalla que
contiene todos los campos y tipos que automáticamente a definido el sistema y
que usted deberá revisar y podrá modificarlos según crea conveniente.
Asimismo, deberá colocar un nombre para la tabla a crear:

Para este ejemplo se llamará: accidentes_bicicletas.accidentes


Una vez finalizado esta parte, seleccionar el botón: SUBMIT, y se mostrara la
siguiente pantalla:

Donde podrá explora las opciones que se muestra.

Se visualiza el contenido en modo tabla.


En la pantalla anterior, cuenta con una barra de herramientas cuyas opciones son:

a. Query Table: Ejecutar Select


b. Refresh : Actualizar datos
c. Import data: Importar Data
d. Drop table : Eliminar tabla
Observe que se ha creado la tabla: accidentes, dentro de la base de datos:
accidentes_bicicletas

Como ejercicio, seleccionemos el icono de la barra de herramientas anterior.


Esto mostrara la siguiente pantalla con una instrucción SELECT que ha generado
para mostrar contenido de la tabla creada.

Cargar los datos (vía comandos hive)


Otra forma de cargar los datos desde el archivo .CSV, es mediante el comando
load. Lo hacemos de la siguiente forma:

1 load data inpath '/user/hue/ AccidentesBicicletas_2010_2018.csv' overwrite into table accidentes;


Ejecutamos la query y vamos a la opción ‘Tables’ seleccionamos la tabla
‘accidentes’

Consultar los datos

Una vez que tenemos los datos de nuestro fichero cargados en la tabla de Hive
podemos ejecutar las queries que se nos ocurran.
Ejercicios:
1. Sacar el total de accidentes acumulados por distrito durante los años 2010
al 2018:

1
2 select distrito, count(*) from accidentes_bicicletas.accidentes group by distrito;
3

Para ejecutar su consulta deberá seleccionar sobre el icono


2. El mismo ejercicio anterior, pero ahora que salga ordenado por de mayor a
menor cantidad.
1
select distrito, count(*) as cantidad from accidentes_bicicletas.accidentes group by distrito order by
2
cantidad desc;
3
3. Ahora, sólo necesitamos el TOP 10 de distritos que donde han ocurrido la
mayor cantidad de accidentes:
1
select distrito, count(*) as cantidad from accidentes_bicicletas.accidentes group by distrito order by
2
cantidad desc limit 10;
3

Si deseamos ver la gráfica de barras de este resultado, tendremos que seleccionar


el icono que se muestra en la barra lateral izquierda:
Puede además modificar el tipo de gráfica:

Seleccione Pie y mostrara lo siguiente:

Como observa una vez que tenemos los datos de un fichero cargados en la tabla
podemos a través de queries SQL recuperar los datos que queramos. Desde la
pestaña ‘log’ se puede ver cómo las queries son traducidas a jobs MapReduce.
Algunas queries complejas tardan bastante sobre todo en hacer los Reduce
debido a que se ejecuta todo en la misma máquina virtual.
7. Conclusiones.
Si trabajas con un gran volumen de datos en un clúster de Hadoop y no dispones
de suficientes conocimientos o tiempo para programar los algoritmos
MapReduce, Hive es una excelente herramienta para sacar los datos que te
puedan interesar.

Imagina tener cientos de pesados ficheros de log de un servidor, lo difícil que es


bucear por ellos. Con Hive resultaría sencillo crear una tabla a partir de los datos
del fichero y filtrar por ejemplo las líneas que contengan errores. Es un ejemplo
de uso, pero utilidades hay muchas.

Espero que te haya sido de ayuda.

Un saludo.

También podría gustarte