hadoop mapreduce reducers combiners

hadoop - Clase "Combinadora" en un trabajo mapreduce



reducers combiners (2)

Para la conmutatividad, digamos que su reductor puede representarse por una función (en el término matemático) llamada f (). Entonces su reductor es conmutativo si f (a, b) = f (b, a) Por ejemplo:

  • suma (A, B) es lo mismo que suma (B, A)
  • xor (A, B) es lo mismo que xor (B, A)
  • concat (A, B) no es lo mismo que concat (B, A)

Para la asociatividad, la propiedad es que f (f (a, b), c) = f (a, f (b, c)). Por ejemplo:

  • (A + B) + C es lo mismo que A + (B + C)
  • (A - B) - C no es lo mismo que A - (B - C)

Entonces, en el contexto de Mapa / Reducir, su reductor debe respetar estas 2 propiedades. Por ejemplo, si su reductor está haciendo solo una suma () o un máximo (), respeta ambas propiedades, pero algo como la media () o la mediana () no, y por lo tanto no puede usarlo como un combinador.

Personalmente veo a los combinadores como mini reductores que se ejecutan en la memoria después de la fase del mapa como una optimización para reducir el tráfico de la red, y la conmutatividad / asociatividad en realidad tiene sentido si ve un Mapa / Reducir de esta manera:

Un Combinador se ejecuta después del Mapeador y antes del Reductor, recibirá como entrada todos los datos emitidos por las instancias del Mapeador en un nodo determinado. luego emite salida a los Reductores.

Y también, si una función de reducción es tanto conmutativa como asociativa , entonces puede usarse como un Combinador.

Mi pregunta es ¿qué significa la frase " conmutativo y asociativo " en esta situación?


Supongamos que tiene una lista de números, 1 2 3 4 5 6.

Asociativo aquí significa que puede tomar su operación y aplicarla a cualquier subgrupo, luego aplicarla al resultado de esos y obtener la misma respuesta:

(1) + (2 + 3) + (4 + 5 + 6) == (1 + 2) + (3 + 4) + (5) + (6) == ...

Piense en el paréntesis aquí como la ejecución de un combinador.

Conmutativo significa que el orden no importa, por lo que:

1 + 2 + 3 + 4 + 5 + 6 == 2 + 4 + 6 + 1 + 2 + 3 == ...

Por ejemplo, además, se ajusta a esta propiedad, como se vio antes. "Máximo" también se ajusta a esta propiedad de arriba, porque el máximo de máximos es el máximo. max (a, b) == max (b, a).

La mediana es un ejemplo que no funciona: la mediana de las medianas no es la verdadera mediana.

No olvide otra propiedad importante de un combinador: los tipos de entrada para la clave / valor y los tipos de salida de la clave / valor deben ser los mismos. Por ejemplo, no puede tomar una cadena: int y devolver una cadena: flotar.

Muchas veces, el reductor puede emitir algún tipo de cadena en lugar de un valor numérico, lo que puede impedir que solo conecte su reductor como el combinador.