Friday, November 24, 2017

The Leftovers - serie intrigante y confusa

¿Cómo sería el mundo si ocurre una catástrofe de tal magnitud que nos afecte a todos directamente? ¿Cómo serían nuestras vidas después? ¿Estaremos bien? O quizás antes ya estábamos peor.

Contexto simple, consecuencia ilógica racional


The Leftovers es una serie donde el 2% de la población ha desaparecido en todo el mundo. Así de simple, fugaz, inexplicable y confuso es ese acontecimiento para todos. Muchos de los personajes se preguntan por qué se han llevado a sus seres queridos mientras que otros creen que no merecieron ser ascendidos y viven sus vidas acongojados con esas preguntas y su tristeza. Ascendidos, es el nombre asignado a los desaparecidos.

El sentido común nunca ha existido


El televidente se encontrará con situaciones incómodas, irrisorias, inexplicables y ridículas, pero los personajes hacen muy bien su trabajo ambientandonos en un escenario donde ya todo parece racional. El joven que después de la ascensión de sus padres ya no le haya sentido a su vida, en verdad quizás nunca le había encontrado alguno. El enfermo que escucha voces no parece estar tan loco después de todo y los personajes pasan por mutaciones en su personalidad por qué nadie comprende lo que ha ocurrido, o tal vez desde hace mucho tiempo tenían desórdenes.

Música espectacular


Las emociones son algo difícil de explicar y describir. En Leftovers la emoción se complementa con una banda sonora espectacular de Max Richter que potencia significativamente a cada una. La tristeza y preocupación por los ascendidos se hace grave, las decisiones y locuras de los protagonistas también son interpretadas mejor gracias a la música.


El espectador se sumergirá en un mar de emociones expresadas con imágenes y música que se complementan de forma espectacular. Un viaje por un escenario inexplicable donde todo parece posible. En fin, una obra maestra.

Tuesday, November 14, 2017

Crunch - uniendo operaciones Map y Reduce

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.


¿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.


crunch-process.png


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
PGroupedTable grouped = chars.groupByKey();
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.