2011-01-07 15 views
7

Estoy en un escenario en el que tengo dos trabajos de reducción de mapas. Me siento más cómodo con Python y planeo usarlo para escribir scripts de mapreduce y usar la transmisión de hadoop para el mismo. ¿Existe una manera conveniente de encadenar los dos trabajos siguiendo la forma cuando se usa la transmisión de hadoop?Encadenando múltiples tareas de mapreduce en la transmisión de Hadoop

mapa 1 -> Reduce1 -> Mapa 2 -> Reduce2

He oído un montón de métodos para lograr esto en Java, pero necesito algo para Hadoop streaming.

Respuesta

4

Aquí hay una gran publicación en el blog sobre cómo usar la conexión en cascada y la transmisión en tiempo real. 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.

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

responsabilidad: yo soy el autor de conexión en cascada

+0

Hmm, no estoy seguro de cómo va a funcionar. He hecho una pregunta: http://stackoverflow.com/questions/35249753/call-mapper-when-reducer-is-done – gsamaras

1

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

Por lo tanto, la salida del primer comando (trabajo) es la entrada a la siguiente orden (de trabajo) que pueden ser variables en su escritura del golpe pasa como un argumento de la línea de comandos (simple y rápida)

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

1

Si ya está escribiendo su mapeador y reductor en Python, me gustaría considerar el uso de Dumbo siempre que esa operación es sencilla. La secuencia de su mapa reduce los trabajos, su mapeador, reductor, etc. son todos en una secuencia de comandos de python que se puede ejecutar desde la línea de comandos.

3

Puede probar Yelp's MRJob para hacer su trabajo. Es una biblioteca MapReduce de código abierto que le permite escribir trabajos encadenados que se pueden ejecutar encima de 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 correlacionadores y reductores por los que desea que pasen sus datos.

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

Cuestiones relacionadas