HIVE – Convierte sentencias SQL en un trabajo de MapReduce

Comandos para manipular ficheros en HDFS

Estos comandos se ejecutan desde la línea de comando, y antes de poder utilizarlos es necesario arrancar el servicio de Hadoop:
$ hadoop/sbin/start-dfs.sh

Resetear el HDFS para eliminar referencias pasadas.

$ hadoop namenode -format

Copiar fichero local en la estructura de datos HDFS:

$ hadoop fs -put /ruta-local/ficheroLocal.txt /ruta-hdfs/ficheroHDFS.txt
$ hadoop fs -put /home/datos/cosumos.csv /user/hadoop/consumos/consumos.css

Copiar ficheros de la estructura HDFS al local:

$ hadoop fs -get /ruta-hdfs/ficheroHDFS.txt /rutalocal/ficheroLocal.txt

Listar el contenido del directorio HDFS:

$ hadoop fs -ls /

Mostrar el contenido de un fichero de la estructura HDFS:

$ hadoop fs -cat /ruta-hdfs/ficheroHDFS.txt

Crear un directorio en HDFS:

$ hadoop fs -mkdir miDirectorio

Borrar un directorio y todo su contenido:

$ hadoop fs -rm -r miDirectorio

 

Crear BBDD

Antes de poder utilizarlo es necesario arrancar el servicio de Hadoop:

$ hadoop/sbin/start-dfs.sh

$ hadoop/sbin/start-yarn.sh

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

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

hive> CREATE DATABASE diegocalvo;

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;

 

Autor: Diego Calvo