En publicaciones anteriores hemos creado la BBDD de Hive para almacenar datos, y hemos cargado datos en HDInsight (HDI) además de crear la tabla externa que hace referencia a los archivos cargados. Recapitulando información de la Introducción a Hive, debemos recordar que el objetivo que se persigue con Hive es:
- Utilizar un lenguaje parecido al SQL tradicional (HiveSQ).
- Mediante este lenguaje ejecutar trabajos Map&Reduce sobre el data almacenado.
A continuación vamos a ejecutar consultas con la herramienta de línea de comando y analizaremos el comportamiento.
Aquí tienes la referencia al artículo anterior: Apache Hive en HDInsight: Primeras consultas (queries) HiveQL
Consulta simple: SELECT count(*) c, logdate FROM <tabla> GROUP BY logdate;
La potencia de Map&Reduce es precisamente su capacidad para leer y transformar mucho dato de una forma escalable. Una consulta habitual de los Datawarehouses es precisamente su capacidad para poder realizar agregados (sumas, contar, multiplicar, etc.). En este caso, vamos a realizar un conteo de filas en una tabla grande agrupando la información por fecha. En este caso, al estar tratando con datos de IIS, contaremos cuantas visitas se han tenido agregadas por día.
SELECT logdate, count(*) / 1000000 FROM w3c GROUP BY logdate ORDER BY logdate;
Si ejecutas la consultas desde linea de comando de Hive, recuerda poner siempre ; para finalizar la instrucción, sino no se procesará.
Cuando se haya iniciado la consulta verás información parecida a la siguiente:
hive> SELECT logdate, count(*) / 1000000 > FROM w3c > GROUP BY logdate > ORDER BY logdate; Total MapReduce jobs = 2 Launching Job 1 out of 2 Number of reduce tasks not specified. Estimated from input data size: 69 In order to change the average load for a reducer (in bytes): set hive.exec.reducers.bytes.per.reducer=<number> In order to limit the maximum number of reducers: set hive.exec.reducers.max=<number> In order to set a constant number of reducers: set mapred.reduce.tasks=<number> Starting Job = job_201311080429_0003, Tracking URL = http://jobtrackerhost:50030 /jobdetails.jsp?jobid=job_201311080429_0003Kill Command
= c:appsdisthadoop-1.2.0.1.3.1.0-06binhadoop.cmd job -kill jo b_201311080429_0003 Hadoop job information for Stage-1: number of mappers: 170; number of reducers: 69 2013-11-11 17:36:34,309 Stage-1 map = 0%, reduce = 0% 2013-11-11 17:36:58,376 Stage-1 map = 1%, reduce = 0%, Cumulative CPU 33.295 sec
Si alguna vez necesitas matar un trabajo M&R en el inicio de la ejecución, aparece la instrucción que debes ejecutar en Hadoop para matar el trabajo.
hadoop.cmd job -kill <id_trabajo>
Según se va procesando el trabajo, verás que el porcentaje de las operaciones MAP y REDUCE irá cambiando (incrementándose o también reduciéndose).
Por otra parte, si necesitas ver los trabajo que se están ejecutando en el cluster de HDInsight, también puedes verlo desde Intenet Explorer como se muestra a continuación:
E información más detallada de cada componente del trabajo:
Esta información también se puede consultar de una forma más sencilla desde PowerShell, cosa que mostraremos en próximas publicaciones.
Como resultado de la consulta podrías ver algo como lo siguiente:
Donde nos mostrará:
- Tiempo Total invertido: 663 segundos que son 6 minutos y 3 segundos.
- Tiempo de CPU Acumulado de la operación MAP. 6700 segundos.
- Lecturas y Escrituras HDFS para la operación MAP.
- Tiempo de CPU Acumulado de la operación REDUCE. 6200 segundos.
- Lecturas y Escrituras HDFS para la operación REDUCE.
En este ejemplo en algo más de 6 minutos hemos conseguido leer y calcular información de logs de IIS correspondientes a más de 8.000.000.000 de filas. En estos momentos el tiempo que ha tardado no nos importa demasiado porque el sistema está “tal cual” sin haber aplicado optimizaciones sobre la estructura cargada; en el futuro veremos publicaciones en esa línea. Finalmente, estos resultados los mostramos desde la herramienta de línea de comando de Hive; lo “natural” en el ciclo de vida de aplicaciones Big-Data es que se muestre primero en Excel para lo que vimos cómo instalar el driver ODBC para Hive de forma dinámica o probablemente en informes que se presentan vía aplicaciones ad-hoc, herramientas de Reporting, consumo por otros procesos, etc.