reducción procesamiento google función firma example ejemplo concepto basa algoritmo hadoop mapreduce

hadoop - procesamiento - En qué parte/clase de mapreduce está la lógica de detener reducir tareas implementadas



mapreduce google (2)

En Hadoop MapReduce, ningún reductor se inicia antes de que todos los mapeadores hayan finalizado. ¿Puede alguien explicarme por favor en qué parte / clase / línea de código se implementa esta lógica? Estoy hablando de Hadoop MapReduce versión 1 (NO HILO). He buscado en el mapa reducir marco, pero hay tantas clases y no entiendo mucho las llamadas al método y su ordenamiento.

En otras palabras, necesito (primero para fines de prueba) permitir que los reductores comiencen a reducir incluso si todavía hay mapeadores en funcionamiento. Sé que de esta manera obtengo resultados falsos para el trabajo, pero sé que este es el comienzo de un trabajo para cambiar partes del marco. Entonces, ¿dónde debería empezar a mirar y hacer cambios?


Algunos puntos para aclaración:

Un reductor no puede comenzar a reducirse hasta que todos los mapeadores hayan finalizado, sus particiones se copien en el nodo donde se está ejecutando la tarea de reducción y finalmente se clasifique.

Lo que puede ver es un reductor que se adelanta a la copia de las salidas del mapa, mientras que otras tareas del mapa aún se están ejecutando. Esto se controla a través de una propiedad de configuración conocida como slowstart ( mapred.reduce.slowstart.completed.map ). Este valor representa una proporción (0.0 - 1.0) del número de tareas de mapa que deben completarse antes de que se inicien las tareas de reducción (copiando las salidas del mapa de aquellas tareas de mapa que se han completado). El valor predeterminado es generalmente de alrededor de 0.9, lo que significa que si tiene 100 tareas de mapa para su trabajo, 90 de ellas deberían finalizar antes de que el rastreador de trabajos pueda comenzar a ejecutar las tareas de reducción.

Todo esto es controlado por el rastreador de trabajos, en la clase JobInProgress , líneas 775, 1610, 1664.


Esto se hace en la fase de mezcla. Para Hadoop 1.x, eche un vistazo a org.apache.hadoop.mapred.ReduceTask.ReduceCopier , que implementa ShuffleConsumerPlugin . También puede leer el documento de investigación "Rompiendo la barrera de la etapa MapReduce" de Verma et al.

EDITAR:

Después de leer la respuesta de @ chris-white, me di cuenta de que mi respuesta necesitaba una explicación adicional. En el modelo MapReduce, debe esperar a que finalicen todos los mapeadores, ya que las claves deben agruparse y ordenarse; Además, es posible que tenga algunos mapeadores especulativos en ejecución y aún no sabe cuál de los mapeadores duplicados terminará primero. Sin embargo, como indica el documento "Rompiendo la barrera de la etapa MapReduce", para algunas aplicaciones, puede tener sentido no esperar toda la producción de los mapeadores. Si desea implementar este tipo de comportamiento (muy probablemente con fines de investigación), entonces debe echar un vistazo a las clases que mencioné anteriormente.