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_0003
Kill 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:

jobstatusIExplorer_thumb_3910C405

 

E información más detallada de cada componente del trabajo:

jobstatusIExplorer2_thumb_3910C405

 

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:

SELECTGROUPBY_thumb_1_241F4192

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.

 

Eladio Rincón

Eladio Rincón is professionally focused on SQL Server databases. He is an MVP on SQL Server since 2003, and his area of expertise is resolution of performance and scalability issues for OLTP based systems. His professional career revolves on SQL Server mentoring, consulting, and training projects. He believes that mixing training and mentoring projects is the best approach to help the clients to get the most from SQL Server. With other mentors of SolidQ he has developed a tuning methodology applied in most of the SQL Server consulting projects.