que common hadoop mapreduce hadoop-partitioning

hadoop - common - mapreduce



¿Cuál es el uso del comparador de agrupación en hadoop map reduce? (4)

El particionador predeterminado calcula el hash de la clave, y aquellas claves que tienen el mismo valor de hash se enviarán al mismo reductor. Si tiene una clave compuesta (natural + aumento) emitida en su asignador y si desea enviar las claves que tienen la misma clave natural al mismo reductor, debe implementar un particionador personalizado.

public class SimplePartitioner implements Partitioner { @Override public int getPartition(Text compositeKey, LongWritable value, int numReduceTasks) { //Split the key into natural and augment String naturalKey = compositeKey.toString().split("separator") return naturalKey.hashCode(); }

}

Y ahora, si desea que todas sus filas relevantes dentro de una partición de datos se envíen a un solo reductor , también debe implementar un comparador de agrupación que considere solo la clave natural

public class SimpleGroupingComparator extends WritableComparator { @Override public int compare(Text compositeKey1, Text compositeKey2) { return compare(compositeKey1.getNaturalKey(),compositeKey2.getNaturalKey()); }

}

Me gustaría saber por qué se usa el comparador de agrupación en una clase secundaria de mapreduce.

Según la guía definitiva, ejemplo de clasificación secundaria.

Queremos que el orden de las llaves sea por año (ascendente) y luego por temperatura (descendente):

1900 35°C 1900 34°C 1900 34°C ... 1901 36°C 1901 35°C

Al configurar un particionador para particionar por parte del año de la clave, podemos garantizar que los registros para el mismo año vayan al mismo reductor. Sin embargo, esto todavía no es suficiente para lograr nuestro objetivo. Un particionador garantiza que solo un reductor reciba todos los registros durante un año; no cambia el hecho de que el reductor agrupa por clave dentro de la partición.

Dado que ya habríamos escrito nuestro propio particionador que se encargaría de que las claves de salida del mapa fueran a un reductor particular, entonces ¿por qué deberíamos agruparlo?

Gracias por adelantado


En apoyo de la respuesta elegida añado:

Siguiendo de esta explicación

**Input**: symbol time price a 1 10 a 2 20 b 3 30 **Map output**: create composite key/values like so: > symbol-time time-price > >**a-1**         1-10 > >**a-2**         2-20 > >**b-3**         3-30

El particionador : enrutará las teclas a-1 y a-2 al mismo reductor a pesar de que las teclas sean diferentes. También dirigirá el b-3 a un reductor separado.

GroupComparator : una vez que la clave de composites / valor llega al reductor en lugar de obtener el reductor

>(**a-1**,{1-10}) > >(**a-2**,{2-20})

Lo anterior sucederá debido a los valores clave únicos que siguen a la composición.

El comparador de grupo garantizará que el reductor reciba:

(a-1,{**1-10,2-20**})

La clave de los valores agrupados será la que viene primero en el grupo. Esto puede ser controlado por el comparador de claves.

**[[In a single reduce method call.]]**


Necesita introducir una clave intermedia que sea un compuesto del año y la temperatura; Participe en la clave natural (el año) e introduzca un comparador que clasificará en toda la clave compuesta. Tienes razón en que al hacer una partición en el año obtendrás todos los datos durante un año en el mismo reductor, de modo que el comparador clasificará los datos para cada año de acuerdo con la temperatura.


Permítame mejorar la declaración "... cuidar las claves de salida del mapa que van a un reductor particular".

Método Reducer Instance vs Reduc: se crea una JVM por cada tarea Reducir y cada una de ellas tiene una única instancia de la clase Reducer. Esta es una instancia Reducer (la llamo Reducer a partir de ahora). Dentro de cada Reducer, el método de reducción se llama varias veces dependiendo en ''agrupación de claves''. Cada vez que se llama reducción de tiempo, ''valuein'' tiene una lista de valores de salida del mapa agrupados por la clave que define en ''comparador de agrupación''. Por defecto, el comparador de agrupación usa la clave de salida del mapa completa.

En el ejemplo, la clave de salida del mapa se cambia a ''año y temperatura'' para lograr la clasificación. A menos que defina un comparador de agrupación que use solo la parte ''año'' de la clave de salida del mapa, no puede realizar todos los registros del mismo año ir al mismo método de reducción de llamada.