Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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:
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.
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:
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:
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
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.
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.
Lo primero será crear la base de datos donde almacenar los datos del fichero.
1 create database accidentes_bicicleta;
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 ';'
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:
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
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.
Un saludo.