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.