Encadenar múltiples tareas de mapreduce en streaming de Hadoop

Estoy en el escenario donde tengo dos trabajos mapreduce. Me siento más cómodo con python y planeo usarlo para escribir scripts mapreduce y usar el streaming de hadoop para el mismo. ¿Hay alguna opción para encadenar los trabajos que siguen a la forma cuando se utiliza el streaming de hadoop?

Mapa1 -> Reducir1 -> Mapa2 -> Reducir2

He escuchado muchos métodos para lograr esto en Java, pero necesito algo para la transmisión de Hadoop.

Aquí hay una excelente publicación en el blog sobre cómo usar Cascading and Streaming. http://www.xcombinator.com/2009/11/18/how-to-use-cascading-with-hadoop-streaming/

El valor aquí es que puede mezclar java (flujos de consultas en cascada) con sus operaciones de transmisión personalizadas en la misma aplicación. Encuentro esto mucho menos frágil que otros métodos.

Tenga en cuenta que el objeto Cascade en Cascade le permite encadenar múltiples flujos (a través de la publicación del blog anterior, su trabajo de Streaming se convertiría en un MapReduceFlow).

Descargo de responsabilidad: Soy el autor de Cascading

Puede probar el MRJob de Yelp para realizar su trabajo. Es una biblioteca MapReduce de código abierto que le permite escribir trabajos encadenados que pueden ejecutarse sobre Hadoop Streaming en su Hadoop Cluster o EC2. Es bastante elegante y fácil de usar, y tiene un método llamado pasos que puede anular para especificar la cadena exacta de asignadores y reductores por los que desea que pasen sus datos.

Compruebe la fuente en https://github.com/Yelp/mrjob
y documentación en http://packages.python.org/mrjob/

Normalmente, la forma en que lo hago con la transmisión de Hadoop y Python es desde mi script de bash que creo para ejecutar los trabajos en primer lugar. Siempre ejecuto desde un script bash, de esta manera puedo recibir correos electrónicos sobre errores y correos electrónicos en caso de éxito y hacerlos más flexibles al pasar parámetros de otro script Ruby o Python que puede funcionar en un sistema de procesamiento de eventos más grande.

Por lo tanto, la salida del primer comando (trabajo) es la entrada del siguiente comando (trabajo), que pueden ser variables en su script de bash que se pasa como un argumento desde la línea de comandos (simple y rápido)

Es posible que desee revisar Oozie http://yahoo.github.com/oozie/design.html un motor de flujo de trabajo para Hadoop que también ayudará a hacer esto (soporta transmisión, no es un problema). No tenía esto cuando comencé, así que terminé teniendo que construir mi propio objeto, pero este es un sistema Kewl y es útil.

Si ya está escribiendo su asignador y reductor en Python, consideraría usar Dumbo donde dicha operación es sencilla. La secuencia de los trabajos de reducción de mapa, su asignador, reductor, etc. están todos en un script de Python que se puede ejecutar desde la línea de comandos.