Hacer programas con funciones tipo map y reduce pueden requerir esfuerzo, muchos de estos programas involucran más de un map o reduce y esas operaciones puede convertirse en una tarea ardua para el desarrollador, más si tambien tienen que optimizar y configurar las acciones para que los mappers y combiners aceleren el procesamiento.
Con el objetivo de facilitar el desarrollo de aplicaciones en el ambiente de Hadoop utilizando el paralelismo y las operaciones para distribuir el procesamiento, ha nacido el proyecto Apache Crunch basado en Apache Flume.
Apache Crunch es un framework hecho Java donde los desarrolladores se abstraen de la creación de clases para Map y Reduce y utilizan funciones Java para distribuir el trabajo. Aunque se usen funciones y los detalles para unir el trabajo entre las operaciones se deja a Crunch, es importante considerar cómo Crunch interpreta y decide utilizarlas.
Las funciones dentro del framework consisten usualmente en la lectura de los datos a procesar, luego pasar por filtros y transformaciones usando operaciones map y reduce, además de volver a hacer más operaciones con los resultados para terminar escribiendo los datos. Cada una de esas operaciones se distribuye a través de distintas máquinas según la configuración del cluster.
PCollection es como la interfaz Collection proveída por Java, pero los datos son procesados por varias máquinas. Una PCollection contiene objetos serializables y provee una serie de operaciones sobre los datos para el procesamiento y filtrado de cada elemento, retornando así una nueva PCollection.
PType es una especialización de PCollection donde se tiene una key y un valor, permitiendo que la key se repita. Junto con la operacion groupByKey de un PType se realiza un Shuffle que agrupa a todos los elementos con la misma key generando una colección de valores para una key.
Un pipeline se compone de una serie de operaciones map, combine y reduce sobre un PCollection. Sin embargo no se ejecuta inmediatamente porque el pipeline funciona en modo Lazy. Al momento de llamar a una operación que ejecute el pipeline cómo escribir una PCollection o el método run(), el pipeline crea un plan de ejecución para cada operación, optimizando y evitando métodos innecesarios.
¿Qué hace Apache Crunch?
Apache Crunch es un framework hecho Java donde los desarrolladores se abstraen de la creación de clases para Map y Reduce y utilizan funciones Java para distribuir el trabajo. Aunque se usen funciones y los detalles para unir el trabajo entre las operaciones se deja a Crunch, es importante considerar cómo Crunch interpreta y decide utilizarlas.
Las funciones dentro del framework consisten usualmente en la lectura de los datos a procesar, luego pasar por filtros y transformaciones usando operaciones map y reduce, además de volver a hacer más operaciones con los resultados para terminar escribiendo los datos. Cada una de esas operaciones se distribuye a través de distintas máquinas según la configuración del cluster.
PCollection
PCollection es como la interfaz Collection proveída por Java, pero los datos son procesados por varias máquinas. Una PCollection contiene objetos serializables y provee una serie de operaciones sobre los datos para el procesamiento y filtrado de cada elemento, retornando así una nueva PCollection.
PType es una especialización de PCollection donde se tiene una key y un valor, permitiendo que la key se repita. Junto con la operacion groupByKey de un PType se realiza un Shuffle que agrupa a todos los elementos con la misma key generando una colección de valores para una key.
Pipeline
Un pipeline se compone de una serie de operaciones map, combine y reduce sobre un PCollection. Sin embargo no se ejecuta inmediatamente porque el pipeline funciona en modo Lazy. Al momento de llamar a una operación que ejecute el pipeline cómo escribir una PCollection o el método run(), el pipeline crea un plan de ejecución para cada operación, optimizando y evitando métodos innecesarios.
Ejemplo de un programa que junta a todas las líneas de texto que tienen el mismo largo y las escribe en un directorio:
Pipeline pipeline = new MRPipeline(getClass());
PCollection lines = pipeline.readTextFile(inputPath);
// Map function
// Cada elemento de la PCollection pasa por una
// operación process() de la clase MapFnTest
PTable chars = lines.parallelDo(MapFnTest, ints())
// Reduce function
// groupByKey retorna objetos donde la key es única y el
// value es una PCollection de String
// value es una PCollection de String
PGroupedTable grouped = chars.groupByKey();
grouped.write(outputPath);
grouped.write(outputPath);
Conclusion
Apache Crunch permite a los desarrolladores crear programas sin preocuparse de unir e implementar sus propias clases map y reduce, dejando esa tarea al Pipeline que además busca formas de optimizar las operaciones. por ejemplo, hacer varios map se ejecuten en una misma máquina. Juntar muchos map y reduce en un mismo programa nunca fue tán fácil.
No comments:
Post a Comment