¿Cuándo comienzan las tareas de reducción en Hadoop?

81

En Hadoop, ¿cuándo comienzan las tareas de reducción? ¿Comienzan después de que se completa un cierto porcentaje (umbral) de mapeadores? Si es así, ¿se fija este umbral? ¿Qué tipo de umbral se utiliza normalmente?

Asesino
fuente

Respuestas:

205

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

Los reductores comienzan a barajarse en función de un umbral de porcentaje de mapeadores que han terminado. Puede cambiar el parámetro para que los reductores se inicien tarde o temprano.

¿Por qué es bueno poner en marcha los reductores antes de tiempo? Porque distribuye 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 poner en marcha los reductores antes de tiempo? Debido a que "acaparan" reducen los espacios mientras solo copian datos y esperan que los mapeadores terminen. Otro trabajo que comienza más tarde y que realmente usará las ranuras de reducción ahora no puede usarlas.

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

Normalmente, me gusta mantenerme por mapred.reduce.slowstart.completed.mapsencima 0.9si el sistema alguna vez tiene varios trabajos ejecutándose a la vez. De esta forma, el trabajo no acapara los reductores cuando no hacen nada más que copiar datos. Si solo tiene un trabajo en ejecución a la vez, 0.1probablemente sea apropiado hacerlo .

Donald Miner
fuente
3
¿Sabes dónde puedo leer más sobre lo que has mencionado?
Daydreamer
1
En mi opinión, el inicio lento está bastante mal documentado ... al igual que la mayoría de los parámetros de configuración poco conocidos.
Donald Miner
5
Buena respuesta @Donald Miner. Solo quiero agregar que en la versión más reciente de Hadoop (estoy usando 1.1.2), el valor predeterminado es 0.05. hadoop.apache.org/docs/r1.1.2/mapred-default.html
sufinawaz
@Donald Estoy usando la versión 0.20.205.0 de hadoop y configuro el parámetro "mapred.reduce.slowstart.completed.maps" en mapred-site.xml en 0.1, pero el reductor aún se ejecuta después de que los mapeadores terminen. Puedo saber por qué ?
harry potter
3
@nishm Creo que está confundiendo la terminología de toda la fase de reducción versus simplemente reducir dentro de la fase de reducción. La fase de reducción es la de mezclar, ordenar y reducir. Slowstart le dice cuándo comenzar la fase general. Tiene razón en que la reducción dentro de la fase de reducción solo comienza una vez que los mapeadores terminan.
Donald Miner
5

La fase de reducción puede comenzar mucho antes de que se llame a un reductor. Tan pronto como "un" mapeador finaliza el trabajo, los datos generados se someten a una clasificación y mezcla (que incluye la llamada al combinador y al particionador). La "fase" del reductor se activa en el momento en que se inicia el procesamiento de datos posterior al mapeador. A medida que se realiza este procesamiento, verá un progreso en el porcentaje de reductores. Sin embargo, todavía no se ha llamado a ninguno de los reductores. Dependiendo de la cantidad de procesadores disponibles / utilizados, la naturaleza de los datos y la cantidad de reductores esperados, es posible que desee cambiar el parámetro como se describe en @ Donald-miner anteriormente.

javadevg
fuente
1

Por lo que entiendo, la fase Reducir comienza con la fase del mapa y sigue consumiendo el registro de los mapas. Sin embargo, dado que hay una fase de clasificación y reproducción aleatoria después de la fase de mapa, todas las salidas deben clasificarse y enviarse al reductor. Entonces, lógicamente, puede imaginar que la fase de reducción comienza solo después de la fase de mapa, pero en realidad, por razones de rendimiento, los reductores también se inicializan con los asignadores.

Animesh Raj Jha
fuente
0

El porcentaje que se muestra para la fase de reducción es en realidad aproximadamente la cantidad de datos copiados de la salida de mapas a los directorios de entrada de los 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, 100% de reducción), es cuando los reductores comienzan a funcionar y, por lo tanto, pueden congelarse en "100% de reducción" si el código de los reductores es intensivo en E / S o CPU.

Maha
fuente
0

La reducción comienza solo después de que todos los mapeadores hayan pescado la tarea, Reducer tiene que comunicarse con todos los mapeadores, 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.

Abhishek
fuente
-1

Considere un ejemplo de WordCount para comprender mejor cómo funciona la tarea de reducción de mapa. Suponga 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. Dado que el archivo es grande, puede dividirse en diferentes bloques y replicarse en diferentes nodos de trabajo. El trabajo de conteo de palabras se compone de tareas de mapa y reducción. 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 apariciones de palabras, el mapeador mientras procesa un bloque daría como resultado resultados intermedios de la forma (palabra1, recuento1), (palabra2, recuento2), etc. Los resultados intermedios de todos los mapeadores es Pasó por una fase aleatoria que reordenará el resultado intermedio.

Suponga que la salida de nuestro mapa de diferentes mapeadores tiene la siguiente forma:

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

Mapa2: - (mi, 12) (es, 23) (era, 30)

Las salidas del mapa se ordenan de tal manera que se le dan los mismos valores clave al mismo reductor. Aquí significaría que las teclas correspondientes a is, was etc van al mismo reductor, es el reductor el que produce la salida final, que en este caso sería: - (y, 12) (is, 47) (my, 12 ) (era, 62)

Annie
fuente
No aborda la pregunta de OP de CUÁNDO se inicia el reductor.
Sai Kiriti Badam
-1

Las tareas de Reductor comienzan solo después de la completionde todos los mapeadores.

Pero la transferencia de datos ocurre después de eachMap. En realidad, es una operación de tracción.

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

Los datos intermedios de Mapper se almacenan en formato disk. Y la transferencia de datos de Mapper a Reduce ocurre a través de la Red ( Data Localityno se conserva en la fase Reducir)

Unmesha SreeVeni
fuente
-2

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

syed
fuente