lunes, 10 de marzo de 2014

Estudio: Capítulo 7 - Tipos y formatos de datos en Mapreduce


Capítulo 7 del libro "Hadoop: The Definitive Guide, 3rd Edition". Se realiza una revisión sobre cómo el modelo MapReduce permite trabajar con archivos de datos en varios formatos desde el API de Java, desde archivos de texto plano a objetos binarios estructurados.
 

1 – Tipos MapReduce. 

Esquema general del flujo de key/value en MapReduce:
map: (K1, V1) → list(K2, V2)
reduce: (K2, list(V2)) → list(K3, V3)
En el caso de poder utilizar una funcion combine :
map: (K1, V1) → list(K2, V2)
combine: (K2, list(V2)) → list(K2, V2)
reduce: (K2, list(V2)) → list(K3, V3)
Clases de API de Java: Mapper (clase Context y método map()), Reducer (clase Context y método reduce()) [cuando se utiliza una funcion combine se realiza mediante una implementación de Reducer], Partitioner (método getPartition(), opera con la key intermedia K2 para obtener el índice de la partición).
   Diferentes clases y métodos deben definir el tipo de datos de las key/value con los que operarán. Son clases diferentes, y aunque el tipo de datos deban coincidir (por ejemplo, K2,V2 declarados como salida de map deben ser los mismos K2,V2 declarados como entrada de reduce), el compilador de Java no lo fuerza, ya que la configuración no se chequea en tiempo de compilación; los conflictos de tipos de datos se detecten en tiempo de ejecución.
   En este apartado se indica los parámetros de configuración y propiedades que deben coincidir en tipo al programar un trabajo MapReduce con la API de Java. 

1.1 – El trabajo MapReduce por defecto.

   Se analiza un trabajo MapReduce escrito utilizando la API de Java sin especificar el mapper ni el reducer (se utiliza las funciones map y reduce por defecto) para ilustrar el funcionamiento de la API y poder entender mejor cómo trabaja MapReduce y el flujo de datos a través de las funciones map y reduce
1.1.1 – El trabajo Streaming por defecto.
1.1.2 – Key/Value en Streaming.

2 - Formatos de entrada. 

   Hadoop puede procesar diferentes tipos de formatos de ficheros con datos. Un Input Split es una partición de los datos de entrada que es procesada por un mapper. Cada Input Split esta dividido en registros, y cada proceso map procesa cada registro (en un formato key/value) de forma secuencial. El concepto de los Splits y los registros es algo lógico, no existe nada que los ate a los ficheros.
Los Input Splits estan representados por la clase InputSplit. Escribiendo una aplicación MapReduce no manegas esta clase directamente, sino que manejas una clase InputFormat que es la responsable de creal los splits y dividirlos en registros. La clase FileInputFormat es la clase base de InputFormat que utiliza ficheros como su origen de datos.
En este apartado se introducen diferentes clases derivadas de InputSplit para lidiar con diferentes tipos de ficheros de entrada y su partición en splits y registros.

2.1 – Input Splits y registros.

2.1.1 – FileInputFormat.
2.1.2 – Paths de entrada en FileInputFormat.
2.1.3 – Input Splits en FileInputFormat.
2.1.4 – Ficheros pequeños y CombineFileInputFormat.
2.1.5 – Previniendo el particionado.
2.1.6 – Información de los ficheros en el mapper.
2.1.7 – Procesando todo un fichero como un registro.

2.2 - Entrada de texto.

2.2.1 – TextInputFormat.
2.2.2 – KeyValueTextInputFormat.
2.2.3 – NLineInputFormat.
2.2.4 – XML.

2.3 – Entrada binaria.

2.3.1 – SequenceFileInputFormat.
2.2.2 – SequenceFileAsTextInputFormat.
2.3.3 - SequenceFileAsBinaryInputFormat.

2.4 – Múltiples entradas.

2.5 – Entradas (y salidas) desde bases de datos.


3 – Formatos de salida. 

   Al igual que se definen formatos de ficheros que actuan como entrada de datos, se definen los ficheros de salida que recogen los datos procesados. La clase OutputFormat  define el tipo y propiedades de estos ficheros de salida.

3.1 – TextOutput.

3.2 – Salida binaria.

3.2.1 – SequenceFileOutputFormat.
3.2.2 – SequenceFileAsBinaryOutputFormat.
3.2.3 - MapFileOutputFormat.

3.3 – Salidas múltiples.

3.4 – Salida 'Lazy' (despreocupada).

3.5 – Salida hacia base de datos.

No hay comentarios:

Publicar un comentario