En la programación de Map Reduce, la fase de reducción tiene como sub-partes barajar, ordenar y reducir. La clasificación es un asunto costoso.
¿Cuál es el propósito de la fase de orden aleatorio y ordenado en el reductor en la programación de Map Reduce?
Respuestas:
En primer lugar
shuffling
está el proceso de transferencia de datos de los mapeadores a los reductores, por lo que creo que es obvio que es necesario para los reductores, ya que de lo contrario, no podrían tener ninguna entrada (o entrada de cada mapeador) . La reproducción aleatoria puede comenzar incluso antes de que finalice la fase del mapa, para ahorrar algo de tiempo. Es por eso que puede ver un estado de reducción superior al 0% (pero inferior al 33%) cuando el estado del mapa aún no es del 100%.Sorting
ahorra tiempo al reductor, lo que le ayuda a distinguir fácilmente cuándo debe comenzar una nueva tarea de reducción. Simplemente inicia una nueva tarea de reducción, cuando la siguiente clave en los datos de entrada ordenados es diferente a la anterior, en pocas palabras. Cada tarea de reducción toma una lista de pares clave-valor, pero tiene que llamar al método reduce () que toma una entrada de lista clave (valor), por lo que tiene que agrupar valores por clave. Es fácil hacerlo si los datos de entrada se preordenan (localmente) en la fase de mapa y simplemente se combinan en la fase de reducción (ya que los reductores obtienen datos de muchos mapeadores).Partitioning
, que mencionaste en una de las respuestas, es un proceso diferente. Determina en qué reductor se enviará un par (clave, valor), salida de la fase del mapa. El particionador predeterminado usa un hash en las claves para distribuirlas a las tareas de reducción, pero puede anularlo y usar su propio particionador personalizado.Una gran fuente de información para estos pasos es este tutorial de Yahoo .
Una buena representación gráfica de esto es la siguiente (la reproducción aleatoria se llama "copiar" en esta figura):
Tenga en cuenta que
shuffling
ysorting
no se realizan en absoluto si especifica reductores cero (setNumReduceTasks (0)). Luego, el trabajo MapReduce se detiene en la fase del mapa y la fase del mapa no incluye ningún tipo de clasificación (por lo que incluso la fase del mapa es más rápida).ACTUALIZACIÓN: Ya que está buscando algo más oficial, también puede leer el libro de Tom White "Hadoop: The Definitive Guide". Aquí está la parte interesante de su pregunta.
Tom White ha sido un comprometido con Apache Hadoop desde febrero de 2007, y es miembro de Apache Software Foundation, así que supongo que es bastante creíble y oficial ...
fuente
Repasemos las fases clave del programa Mapreduce.
La fase del mapa la realizan los mapeadores. Los mapeadores se ejecutan en pares clave / valores de entrada sin clasificar. Cada asignador emite cero, uno o varios pares clave / valor de salida para cada par clave / valor de entrada.
La fase de combinación se realiza mediante combinadores. El combinador debe combinar pares clave / valor con la misma clave. Cada combinador puede funcionar cero, una o varias veces.
La fase de barajar y ordenar la realiza el marco. Los datos de todos los mapeadores se agrupan por clave, se dividen entre reductores y se ordenan por clave. Cada reductor obtiene todos los valores asociados a la misma clave. El programador puede proporcionar funciones de comparación personalizadas para ordenar y un particionador para dividir los datos.
El particionador decide qué reductor obtendrá un par clave-valor en particular.
El reductor obtiene pares clave / [lista de valores] ordenados, ordenados por clave. La lista de valores contiene todos los valores con la misma clave producidos por los mapeadores. Cada reductor emite cero, uno o varios pares clave / valor de salida para cada par clave / valor de entrada .
Eche un vistazo a este artículo de javacodegeeks de Maria Jurcovicova y al artículo de mssqltips de Datta para una mejor comprensión
A continuación se muestra la imagen del artículo de safaribooksonline
fuente
ie
cadenas de Reductores y Salida deberían seris
.Pensé en agregar algunos puntos que faltaban en las respuestas anteriores. Este diagrama tomado de aquí indica claramente lo que realmente está sucediendo.
Si vuelvo a afirmar el verdadero propósito de
Dividir: mejora el procesamiento paralelo al distribuir la carga de procesamiento entre diferentes nodos (mapeadores), lo que ahorraría el tiempo total de procesamiento.
Combinar: reduce la salida de cada asignador. Ahorraría el tiempo invertido en mover los datos de un nodo a otro.
Ordenar (Ordenar y Ordenar): Facilita el tiempo de ejecución para programar (generar / iniciar) nuevos reductores, mientras que mientras se revisa la lista de elementos ordenados, siempre que la clave actual es diferente de la anterior, puede generar un nuevo reductor .
fuente
Algunos de los requisitos de procesamiento de datos no necesitan orden en absoluto. Syncsort había hecho que la clasificación en Hadoop se pudiera conectar. Aquí hay un buen blog de ellos sobre la clasificación. El proceso de mover los datos de los mapeadores a los reductores se llama barajar, consulte este artículo para obtener más información sobre el mismo.
fuente
Siempre asumí que esto era necesario ya que la salida del mapeador es la entrada para el reductor, por lo que se ordenó en función del espacio de teclas y luego se dividió en cubos para cada entrada del reductor. Desea asegurarse de que todos los mismos valores de una clave terminen en el mismo cubo que va al reductor para que se reduzcan juntos. No tiene sentido enviar K1, V2 y K1, V4 a diferentes reductores, ya que deben estar juntos para poder reducirse.
Intenté explicarlo de la manera más simple posible.
fuente
El barajado es el proceso mediante el cual los datos intermedios de los mapeadores se transfieren a 0,1 o más reductores. Cada reductor recibe 1 o más llaves y sus valores asociados en función del número de reductores (para una carga equilibrada). Además, los valores asociados con cada clave se ordenan localmente.
fuente
Solo hay dos cosas que MapReduce hace NATIVAMENTE: ordenar y (implementado por ordenar) GroupBy escalable.
La mayoría de las aplicaciones y los patrones de diseño de MapReduce se basan en estas dos operaciones, que se proporcionan mediante la reproducción aleatoria y la ordenación.
fuente
Esta es una buena lectura. Espero eso ayude. En cuanto a la clasificación que le preocupa, creo que es para la operación de fusión en el último paso de Map. Cuando se realiza la operación de mapa y es necesario escribir el resultado en el disco local, se operará una fusión múltiple en las divisiones generadas desde el búfer. Y para una operación de fusión, es útil ordenar cada partición por adelantado.
fuente
Bueno, en Mapreduce hay dos frases importantes llamadas Mapper y reducer, ambas son demasiado importantes, pero Reducer es obligatorio. En algunos programas, los reductores son opcionales. Ahora pase a su pregunta. Mezclar y clasificar son dos operaciones importantes en Mapreduce. First Hadoop framework toma datos estructurados / no estructurados y separa los datos en clave, valor.
Ahora el programa Mapper separa y organiza los datos en claves y valores para ser procesados. Genere valores de clave 2 y valor 2. Estos valores deben procesarse y reorganizarse en el orden adecuado para obtener la solución deseada. Ahora, esta mezcla y clasificación se realiza en su sistema local (Framework cuídalo) y procesa en el sistema local después de la limpieza del marco de proceso de los datos en el sistema local. Okay
Aquí utilizamos el combinador y la partición también para optimizar este proceso de ordenación y ordenación. Después de la disposición adecuada, esos valores clave pasan a Reducer para obtener el resultado deseado del Cliente. Finalmente, el reductor obtiene la salida deseada.
K1, V1 -> K2, V2 (escribiremos el programa Mapper), -> K2, V '(aquí baraja y suaviza los datos) -> K3, V3 Genera la salida. K4, V4.
Tenga en cuenta que todos estos pasos son solo operaciones lógicas, no cambian los datos originales.
Su pregunta: ¿Cuál es el propósito de la fase de orden aleatorio y ordenado en el reductor en la programación de reducción de mapas?
Respuesta corta: procesar los datos para obtener el resultado deseado. Mezclar es agregar los datos, reducir es obtener la salida esperada.
fuente