Apache HIVE

Definición de Hive

Apache Hive es una herramienta de de almacenamiento de datos que facilita la lectura, escritura y almacenamiento de grandes volúmenes de datos sobre sistemas HDFS o Amazon S3. Fue creado por Facebook y desarrollado por empresas como Netflix o Finra.

El lenguaje utilizado para consultas es HiveQL, que proporciona un lenguaje basado en SQL que realiza consultas de forma transparente en MapReduce, Apache Tez​ y tareas Spark.

 

Características

  • La ejecución puede correr bajo YARN.
  • Proporciona índices bitmaps para acelerar las consultas.
  • Soporta varios tipos de almacenamiento: texto, RCFile, HBase, ORC, …
  • Soporta varios formatos de compresión: deflate, bwt, snappy, …
  • Almacena metadatos en bases de datos relacionales como MySQL o Derby, para reducir el tiempo verificación semántica.
  • Permite al usuario definir funciones UDF para manipular fechas, textos, …

 

Ejemplo de uso de Hive

Prerequisitos

Consultar el apartado de “Comandos para manipular ficheros HDFS

 

Bases de datos

Antes de poder utilizarlo es necesario arrancar el servicio de Hadoop

Y arrancar el servicio de HIVE para poder ejecutar comandos, para ello buscar la carpeta hive y una vez allí ejecutar:

$ cd hive
$ bin/hive

 

Consultar BBDD existentes

hive> SHOW DATABASES;

 

Crear BBDD

Al estar dentro ya podemos ejecutar la sentencia para crear una base de datos, como ejemplo:

hive> CREATE DATABASE diegocalvo

 

Seleccionar la base de datos con la que trabajar

hive> use diegocalvo;

 

Tablas

Antes de manipular tablas de una bases de datos en escenario indicar al sistema que bases de datos usar, mediante el comando “use nombre_bbdd”

Ver tablas

hive> show tables;

 

Crear Tabla externa

Sino esta iniciado el servicio de hive realizar todos los pasos indicados en la creación de la BBDD y después:

CREATE EXTERNAL TABLE localizacion (LocalizacionID INT, Zona STRING, Barrio STRING)
 COMMENT 'tabla de localizacion'
 ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
 STORED AS TEXTFILE
 LOCATION '/user/hadoop/localizacion';
CREATE EXTERNAL TABLE consumo (Fecha TIMESTAMP, Compania STRING, ConsumoID INT)
 COMMENT 'tabla de consumo'
 ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
 STORED AS TEXTFILE
 LOCATION '/user/hadoop/consumo';

 

Crear tabla interna para Joins

CREATE EXTERNAL TABLE union ( Fecha TIMESTAMP, Compania STRING, ID INT, Zona STRING, Barrio STRING)
 COMMENT 'tabla de union entre el consumo y la localización'
 ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
 STORED AS PARQUET

 

Insertar datos en tabla interna

INSERT INTO TABLE union
 SELECT C.Fecha, C.Compania, C.ID, L.Zona, L.Barrio
 FROM consumo C INNER JOIN location L
 ON C.ConsumoID = L.LocalizacionID

 

Consultas: Contar días de las semana repetidos

SELECT count(*), date_format(Fecha, 'EEEE')
 FROM union
 GROUP BY date_format(Fecha, 'EEEE');

 

Consultas: Los 10 barrios más activos

SELECT count(*) AS cnt, barrio
 FROM union
 GROUP BY barrio
 SORT BY cnt DESC LIMIT 10;

 

Consultas: Contar cuantos  elementos por cada día del mes

SELECT dayofmonth(Fecha), count(*)
 FROM union
 GROUP BY dayofmonth(Fecha);

 

Consultas: Franjas de horario más activas

SELECT hour(Fecha), count(*) as cnt
 FROM union
 GROUP BY hour(Fecha)
 ORDER BY cnt DESC LIMIT 5;

 

Otros artículos que pueden ser de interés:

Autor: Diego Calvo