spark google example ejemplo hadoop mapreduce bigdata hadoop-partitioning

hadoop - google - mapreduce hdfs



El mapa de hadoop reduce la clasificación secundaria (5)

Aquí hay un ejemplo para agrupar. Considere una clave compuesta (a, b) y su valor v . Y supongamos que después de la clasificación terminas, entre otros, con el siguiente grupo de pares (clave, valor):

(a1, b11) -> v1 (a1, b12) -> v2 (a1, b13) -> v3

Con el comparador de grupos predeterminado, el marco llamará a la función de reduce 3 veces con pares respectivos (clave, valor), ya que todas las claves son diferentes. Sin embargo, si proporciona su propio comparador de grupo personalizado y lo define de modo que solo dependa de a , ignorando b , entonces el marco concluye que todas las claves de este grupo son iguales y llama a la función de reducción solo una vez utilizando la siguiente clave y el lista de valores:

(a1, b11) -> <v1, v2, v3>

Tenga en cuenta que solo se usa la primera clave compuesta, y que b12 y b13 están "perdidos", es decir, que no se pasan al reductor.

En el ejemplo bien conocido del libro "Hadoop" que calcula la temperatura máxima por año, a es el año, b son temperaturas clasificadas en orden descendente, por lo tanto, b11 es la temperatura máxima deseada y no le importan otros b es La función de reducción simplemente escribe el recibido (a1, b11) como la solución para ese año.

En su ejemplo de "bigdataspeak.com", se requieren todas las b en el reductor, pero están disponibles como partes de los respectivos valores (objetos) v .

De esta forma, al incluir su valor o su parte en la clave, puede usar Hadoop para clasificar no solo sus claves, sino también sus valores.

Espero que esto ayude.

¿Puede alguien explicarme cómo funciona la clasificación secundaria en hadoop?
¿Por qué uno debe usar GroupingComparator y cómo funciona en hadoop?

Estaba revisando el enlace que figura a continuación y tengo dudas sobre cómo funciona groupcomapator.
¿Alguien puede explicarme cómo funciona el comparador de agrupación?

http://www.bigdataspeak.com/2013/02/hadoop-how-to-do-secondary-sort-on_25.html


Los ejemplos mencionados arriba tienen una buena explicación, permítanme simplificarlo. Necesitamos realizar tres pasos principales.

  1. Mapout debería ser (clave + valor, valor)
  2. Cuando nos unimos a Key & Value. Todavía tenemos que tener un mecanismo para ordenar tanto la clave original como el valor. Así que agregaríamos un comparador personalizado.
  3. Ahora los datos se ordenan en la clave original, pero si enviamos estos datos a Reducer, no se garantizará que se envíe todo el valor de una clave determinada a un reductor, ya que estamos utilizando Key + Value como clave. Para asegurarnos de que agreguemos el comparador de grupos.

Me resulta fácil entender ciertos conceptos con la ayuda de diagramas y este es sin duda uno de ellos.

Supongamos que nuestra clasificación secundaria está en una clave compuesta hecha de Apellido y Nombre.

Con la llave compuesta fuera del camino, ahora veamos el mecanismo de clasificación secundario

El particionador y el comparador de grupos usan solo la clave natural , el particionador lo usa para canalizar todos los registros con la misma clave natural a un solo reductor. Esta partición ocurre en la Fase del Mapa, los datos de varias tareas del Mapa los reciben los reductores, donde se agrupan y luego se envían al método de reducción . Esta agrupación es donde el comparador de grupo entra en la imagen, si no hubiéramos especificado un comparador de grupo personalizado, Hadoop habría utilizado la implementación predeterminada que habría considerado la clave compuesta completa, lo que habría llevado a resultados incorrectos.

Descripción de los pasos de MR


Un particionador solo asegura que un reductor reciba todos los registros que pertenecen a una clave, pero no cambia el hecho de que el reductor se agrupa por clave dentro de la partición.

En el caso de una clasificación secundaria, formamos claves compuestas y si dejamos que el comportamiento predeterminado continúe, la lógica de agrupamiento considerará que las claves son diferentes.

Entonces, necesitamos controlar la agrupación. Por lo tanto, debemos indicar al marco que se agrupe en función de la parte natural de la clave en lugar de la clave compuesta. Por lo tanto, el comparador de agrupación debe ser usado para el mismo.


Comparador de agrupamiento

Una vez que los datos llegan a un reductor, todos los datos se agrupan por clave. Como tenemos una clave compuesta, debemos asegurarnos de que los registros estén agrupados únicamente por la clave natural. Esto se logra escribiendo un GroupPartitioner personalizado. Tenemos un objeto Comparator solo considerando el campo yearMonth de la clase TemperaturePair para agrupar los registros.

public class YearMonthGroupingComparator extends WritableComparator { public YearMonthGroupingComparator() { super(TemperaturePair.class, true); } @Override public int compare(WritableComparable tp1, WritableComparable tp2) { TemperaturePair temperaturePair = (TemperaturePair) tp1; TemperaturePair temperaturePair2 = (TemperaturePair) tp2; return temperaturePair.getYearMonth().compareTo(temperaturePair2.getYearMonth()); } }

Estos son los resultados de ejecutar nuestro trabajo de clasificación secundario:

new-host-2:sbin bbejeck$ hdfs dfs -cat secondary-sort/part-r-00000

190101 -206

190102 -333

190103 -272

190104 -61

190105 -33

190106 44

190107 72

190108 44

190109 17

190110 -33

190111 -217

190112 -300

Si bien la clasificación de datos por valor puede no ser una necesidad común, es una buena herramienta para tener en el bolsillo cuando sea necesario. Además, hemos podido profundizar en el funcionamiento interno de Hadoop al trabajar con particiones personalizadas y particionadores de grupos. Consulte también este enlace ... ¿Cuál es el uso del comparador de agrupación en el mapa hadoop reducir