martes, 4 de marzo de 2014

Estudio: Capítulo 2 - MapReduce

Capítulo 2 del libro "Hadoop: The Definitive Guide, 3rd Edition". En este capítulo se introduce el paradigma de programación MapReduce.

MapReduce proporciona un modelo de programación para el procesado distribuido (inherentemente procesado paralelo) de grandes cantidades de datos. Hadoop puede ejecutar programas con el modelo MapReduce escritos en diversos programas (Java, Ruby, Python, C++...).


1 – Dataset: datos recolectados por sensores climatológicos.

 
   Se utiliza un conjunto de datos recolectados a cada hora por diferentes estaciones climatológicas situadas a lo largo de todo el planeta durante 100 años (gran cantidad de datos semi-estructurados y oriendados a registros: propicios para el análisis con MapReduce). Datos almacenados en archivos de texto ASCII, donde cada linea de texto es un registro.
   Se utiliza la herramienta de análisis de datos almacenados en lineas que proporciona Unix awk  para calcular la temperatura máxima que se ha registrado en cada uno de los años. El tiempo de ejecución para una tarea tan simple resulta ser muy elevado. Así, se argumenta el uso del procesado paralelo en un sistema distribuido para acelerar el procesado.
 

1.1 – Formato de los datos.


1.2 – Analizando los datos con herramientas de Unix. 


2 – Analizando los datos con Hadoop. 

 
   Se introduce el procesado en paralelo utilizando funciones Map y Reduce sobre el formato de datos organizados en parejas key-value. Se utiliza el ejemplo de análisis de la temperatura máxima por cada año para ilustrar el proceso. 
   Se introduce la API de Java (se centra en la nueva API, destacando las diferencias y novedades con respecto a la antigua) para escribir programas MapReduce. Mapper class, Reducer class, Map/Reduce methods, Job object, InputFormat, OutputFormat
   Se ilustra el proceso mediante la creación y ejecución de un programa MapReduce escrito en Java en local (utilizando un único ordenador: Standalone mode) para obtener la temperatura máxima en cada uno de los años utilizando un dataset reducido de mediciones meteorológicas.
 

2.1 - Map y Reduce.
2.2 – Java MapReduce.

2.2.1 – Ejecución de testeo.

2.2.2 – Las APIs de Java MapReduce antigua y nueva.


3 – Escalando el problema para grandes cantidades de datos. 

 
   Se introduce el almacenamiento distribuido HDFS, la estructura de nodos en el procesado MapReduce (racks y nodos, jobtracker y tasktrackers), la partición de los datos de entrada (input splits) para su procesado en paralelo, la optimización para el tratamiento local de datos por los nodos en el procesado paralelo (1 - data local, 2 - rack local, 3 - inter rack) y el flujo de datos en el sistema distribuido desde la entrada a la salida (entrada, particionado, map, shuffle and sort, reduce, salida).
   Se argumenta como también puede usarse una etapa de optimización (reducer) en el caso que la operación de tratamiendo de datos que se aplica tenga como propiedad ser distributiva (conmutativa y asociativa).
   Se utiliza el mismo programa escrito en el apartado anterior en un cluster de ordenadores con el dataset al completo. MapReduce se ajusta al tamaño de tus datos y al conjunto de hardware del que dispongas.
 

3.1 – Flujo de datos.

3.2 – Funcion Combiner.

3.2.1 – Especificando una función combiner.

3.3 – Corriendo un trabajo distribuido MapReduce.


4 – Hadoop Streaming. 

 
Hadoop proporciona una API MapReduce que permite escribir funciones map y reduce en otros lenguajes que no sea Java. Esta API es Hadoop Streaming, la cuál esta basada en los streams estandar de Unix como interfaz entre Hadoop y tu programa. Puedes usar cualquier lenguaje que pueda leer la entrada estandar y escribir en la salida estandar para crear programas con el modelo MapReduce.

4.1 – Ruby.

4.2 – Python.


5 – Hadoop Pipes.

 
Es la interfaz de C++ con Hadoop para escribir  programas MapReduce. En vez de utilizar la entrada/salida estandar, esta interfaz utiliza sockets como canales por los que el proceso que ejecuta la función MapReduce escrita se comunica con el tasktracker.

No hay comentarios:

Publicar un comentario