2010-04-13 9 views
14

Estoy ejecutando un trabajo de Hadoop usando Hive en realidad, que se supone que contiene uniq líneas en muchos archivos de texto. En el paso de reducción, elige el registro de marca de tiempo más reciente para cada clave.Usando Hadoop, ¿están garantizados mis reductores para obtener todos los registros con la misma clave?

¿Hadoop garantiza que cada registro con la misma clave, salida por el paso de mapa, irá a un único reductor, incluso si se están ejecutando muchos reductores en un clúster?

Me preocupa que la salida del mapeador pueda dividirse después de que la mezcla se produzca en medio de un conjunto de registros con la misma clave.

Respuesta

13

Todos los valores para una clave se envían al mismo reductor. Vea esto Yahoo! tutorial para más discusión.

Este comportamiento está determinado por el particionador, y puede no ser cierto si usa un particionador diferente al predeterminado.

+0

en realidad no estoy seguro de esto. Consulte http://stackoverflow.com/questions/26693034/hadoop-strange-behaviour-reduce-function-doesnt-get-all-values-for-a-key. No modifiqué el particionador en mi programa. – Madrugada

3

Sí, Hadoop garantiza que todas las llaves que sean iguales irán al mismo Reductor. Esto se logra usando una función de Partición que agrupa las teclas usando una función de hash.

Para obtener más información sobre el proceso de partición echar un vistazo a esto: Partitioning Data

Se habla específicamente sobre cómo los diferentes creadores de mapas que procesan la misma clave de asegurar que todas las claves de un valor dado terminan en la misma partición, y por lo tanto, son procesados ​​por el mismo reductor.

5

¡En realidad, no! Puede crear un Partitioner que envíe la misma clave a un reductor diferente cada vez que se llame al getPartition. En general, no es una buena idea para la mayoría de las aplicaciones.

Cuestiones relacionadas