2012-07-26 17 views

Respuesta

181

La fase de reducción tiene 3 pasos: mezclar, ordenar, reducir. Shuffle es donde los datos son recolectados por el reductor de cada mapeador. Esto puede suceder mientras los mapeadores están generando datos ya que solo es una transferencia de datos. Por otro lado, ordenar y reducir solo puede comenzar una vez que todos los mapeadores hayan terminado. Puedes decir cuál está haciendo MapReduce al mirar el porcentaje de finalización del reductor: 0-33% significa que está haciendo un shuffle, 34-66% es de tipo, 67% -100% es reducido. Esta es la razón por la cual sus reductores a veces parecerán "atascados" al 33%: está esperando que los mapeadores terminen.

Los reductores comienzan a mezclarse según el umbral de porcentaje de correlacionadores que han finalizado. Puede cambiar el parámetro para que los reductores comiencen tarde o temprano.

¿Por qué es bueno comenzar los reductores? Debido a que extiende la transferencia de datos de los mapeadores a los reductores a lo largo del tiempo, lo cual es bueno si su red es el cuello de botella.

¿Por qué es malo comenzar los reductores? Debido a que "hog up" reducen las ranuras mientras solo copian datos y esperan que los mapeadores terminen. Otro trabajo que comienza más tarde y que realmente utilizará reducir ranuras ahora no puede usarlos.

Puede personalizar el inicio de los reductores cambiando el valor predeterminado de mapred.reduce.slowstart.completed.maps en mapred-site.xml. Un valor de 1.00 esperará a que todos los mapeadores finalicen antes de iniciar los reductores. Un valor de 0.0 iniciará los reductores de inmediato. Un valor de 0.5 iniciará los reductores cuando la mitad de los mapeadores estén completos. También puede cambiar mapred.reduce.slowstart.completed.maps en una base de trabajo por trabajo. En las nuevas versiones de Hadoop (al menos 2.4.1) se llama al parámetro mapreduce.job.reduce.slowstart.completedmaps (gracias usuario yegor256).

Normalmente, me gusta mantener mapred.reduce.slowstart.completed.maps por encima de 0.9 si el sistema tiene varias tareas ejecutándose a la vez. De esta forma, el trabajo no reduce los reductores cuando no están haciendo otra cosa que copiar datos. Si solo tiene un trabajo en ejecución a la vez, probablemente sea apropiado hacer 0.1.

+3

¿sabes dónde puedo leer más acerca de lo que has mencionado? – daydreamer

+1

Slowstart está bastante mal documentado en mi opinión ... al igual que la mayoría de los parámetros de configuración desconocidos. –

+5

Buena respuesta @Donald Miner. Solo quiero agregar eso en la versión más nueva de Hadoop (estoy usando 1.1.2), el valor predeterminado es 0.05. http://hadoop.apache.org/docs/r1.1.2/mapred-default.html – sufinawaz

1

Todo lo que entiendo Reducir el inicio de fase con la fase del mapa y seguir consumiendo el registro de los mapas. Sin embargo, dado que hay una fase de ordenación y reproducción aleatoria después de la fase del mapa, todas las salidas deben clasificarse y enviarse al reductor. Entonces, lógicamente, usted puede imaginar que la fase de reducción comienza solo después de la fase del mapa, pero en realidad para los reductores de la razón de rendimiento también se inicializan con los mapeadores.

0

El porcentaje que se muestra para la fase de reducción es en realidad la cantidad de datos copiados de la salida de mapas a los directorios de entrada de reductores. ¿Para saber cuándo comienza esta copia? Es una configuración que puede establecer como Donald mostró arriba. Una vez que todos los datos se copian en los reductores (es decir, se reduce al 100%) es cuando los reductores comienzan a funcionar y, por lo tanto, pueden congelarse en "100% de reducción" si el código de reductores consume E/S o CPU.

3

La fase de reducción puede comenzar mucho antes de que se invoque un reductor. Tan pronto como un "mapeador" termina el trabajo, los datos generados son sometidos a una cierta clasificación y mezcla (que incluye llamadas al combinador y al particionador). La "fase" del reductor comienza en el momento en que se inicia el procesamiento de datos del correlacionador. A medida que se realice este procesamiento, verá un progreso en el porcentaje de reductores. Sin embargo, ninguno de los reductores ha sido llamado aún. Dependiendo del número de procesadores disponibles/usados, la naturaleza de los datos y el número de reductores esperados, es posible que desee cambiar el parámetro descrito por @Donald-miner anteriormente.

0

Considere un ejemplo de WordCount para comprender mejor cómo funciona la tarea de reducción de mapa. Supongamos que tenemos un archivo grande, digamos una novela y nuestra tarea es encontrar el número de veces que aparece cada palabra en el archivo. Como el archivo es grande, puede dividirse en diferentes bloques y replicarse en diferentes nodos de trabajadores. El trabajo de recuento de palabras se compone de tareas de mapa y reducir. La tarea de mapa toma como entrada cada bloque y produce un par clave-valor intermedio. En este ejemplo, dado que estamos contando el número de ocurrencias de palabras, el mapeador mientras procesa un bloque daría como resultado resultados intermedios de la forma (palabra1, cuenta1), (palabra2, cuenta2) etc. Los resultados intermedios de todos los mapeadores son pasó a través de una fase aleatoria que reordenará el resultado intermedio.

Supongamos que nuestra salida de mapa de diferentes creadores de mapas es de la siguiente forma:

Mapa 1: - (es decir, 24) (era, 32) (y, 12)

Mapa 2: - (mi, 12) (es decir, 23) (WAS, 30)

el mapa salidas están ordenados de tal manera que los mismos valores de clave se dan a la misma reductor. Aquí significaría que las teclas correspondientes a es, etc, van al mismo reductor. Es el reductor que produce la salida final, que en este caso sería: - (y, 12) (es, 47) (mi, 12) (fue, 62)

0

Las tareas del reductor comienzan solo después del completion de todos los correlacionadores.

Pero la transferencia de datos ocurre después de each Mapa. En realidad es una operación de extracción.

Eso significa que cada vez que el reductor preguntará a cada tarea de mapas si tienen algunos datos para recuperar del mapa. Si encuentran que un asignador completó su tarea, Reducer extraerá los datos intermedios.

Los datos intermedios de Mapper se almacenan en disk. Y la transferencia de datos desde Mapper para reducir pasa a través de la red (Data Locality no se conserva en Reducir fase)

0

Reducir comienza sólo después de que todo el asignador han pescado allí tarea, reductor tiene que comunicarse con todos los creadores de mapas por lo que tiene que esperar hasta que el último mapeador haya terminado su tarea. Sin embargo, el mapeador comienza a transferir datos al momento en que ha completado su tarea.

1

Cuando Mapper finaliza su tarea, Reducer comienza su trabajo para reducir los datos, este es el trabajo de Mapreduce.

Cuestiones relacionadas