sorting - fases - ¿Cuál es el propósito de mezclar y ordenar la fase en el reductor en Map Reduce Programming?
mapreduce google (9)
Algunos de los requisitos de procesamiento de datos no necesitan clasificación en absoluto. Syncsort había hecho la ordenación en Hadoop conectable. Here hay un buen blog de ellos sobre clasificación. El proceso de mover los datos de los mapeadores a los reductores se denomina reorganización, consulte this artículo para obtener más información sobre el mismo.
En la programación de reducción de mapa, la fase de reducción se baraja, clasifica y reduce según sus subpartes. La clasificación es un asunto costoso.
¿Cuál es el propósito de mezclar y ordenar la fase en el reductor en Map Reduce Programming?
Bueno, en Mapreduce hay dos frases importantes llamadas Mapper y reductor, ambas son muy importantes, pero Reducer es obligatorio. En algunos programas, los reductores son opcionales. Ahora ven a tu pregunta. Mezclar y ordenar son dos operaciones importantes en Mapreduce. El primer marco de Hadoop toma datos estructurados / no estructurados y los separa en Key, Value.
Ahora el programa Mapper separa y ordena los datos en claves y valores para ser procesados. Generar valores de clave 2 y valor 2 Estos valores deben procesarse y reorganizarse en el orden correcto para obtener la solución deseada. Ahora, esta reorganización y ordenación se realizan en su sistema local (Framework cuídelo) y procese en el sistema local una vez que el marco de trabajo haya limpiado los datos en el sistema local. De acuerdo
Aquí usamos el combinador y la partición también para optimizar este proceso de reorganización y ordenación. Después de la disposición adecuada, esos valores clave pasan a Reducer para obtener la salida deseada del Cliente. Finalmente Reducer 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.
Tu pregunta: ¿Cuál es el propósito de mezclar y ordenar la fase en el reductor en Map Reduce Programming?
Respuesta corta: para procesar los datos para obtener la salida deseada. Mezclar es agregar los datos, reducir es obtener el resultado esperado.
El barajado es el proceso por 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 dependiendo del número de reductores (para una carga equilibrada). Además, los valores asociados con cada clave se ordenan localmente.
Pensé simplemente en agregar algunos puntos que faltaban en las respuestas anteriores. Este diagrama tomado de mssqltips indica claramente lo que está sucediendo realmente.
Si declaro de nuevo el verdadero propósito de
División: Mejora el procesamiento paralelo distribuyendo la carga de procesamiento a través de diferentes nodos (Mappers), lo que ahorraría el tiempo total de procesamiento.
Combine: reduce la salida de cada Mapper. Ahorraría el gasto de tiempo para mover los datos de un nodo a otro.
Sort (Shuffle & Sort): facilita el tiempo de ejecución para programar (generar / iniciar) nuevos reductores, mientras que al pasar por la lista de elementos ordenados, cada vez que la clave actual es diferente de la anterior, puede generar un nuevo reductor .
Revisemos las fases clave del programa Mapreduce.
La fase del mapa es hecha por los mapeadores. Los mapeadores se ejecutan en pares de clave / valores de entrada sin clasificar. Cada asignador emite pares de clave / valor de salida cero, uno o múltiples para cada par de clave / valor de entrada.
La fase de combinación se realiza por combiners. El combinador debe combinar pares clave / valor con la misma clave. Cada combinador puede ejecutar cero, una o varias veces.
La fase de mezcla y clasificación se realiza por el marco. Los datos de todos los mapeadores se agrupan por la clave, se dividen entre los reductores y se clasifican por la clave. Cada reductor obtiene todos los valores asociados con la misma clave. El programador puede proporcionar funciones de comparación personalizadas para la clasificación y un particionador para la división de datos.
El particionador decide qué reductor obtendrá un par de valor clave particular.
El reductor obtiene pares de clave clasificada / [lista de valores], ordenados por la clave. La lista de valores contiene todos los valores con la misma clave producida por los mapeadores. Cada reductor emite pares de clave / valor de salida cero, uno o múltiples para cada par de clave / valor de entrada .
Eche un vistazo a este article javacodegeeks de Maria Jurcovicova y el artículo de mssqltips de Datta para una mejor comprensión
A continuación se muestra la imagen del artículo safaribooksonline
Siempre he supuesto que esto era necesario ya que la salida del asignador es la entrada para el reductor, por lo que se ordenó en función del espacio de teclado y luego se dividió en depósitos para cada entrada del reductor. Desea asegurarse de que todos los mismos valores de una clave terminen en la misma cubeta que va al reductor para que se reduzcan juntos. No tiene sentido enviar K1, V2 y K1, V4 a diferentes reductores, ya que necesitan estar juntos para poder reducirlos.
Intentó explicarlo de la manera más simple posible
This es una buena lectura. Espero eso ayude. En términos de clasificación, usted está preocupado, creo que es para la operación de fusión en el último paso de Map. Cuando se realiza la operación del 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, la clasificación de cada partición en avanzado es útil.
Solo hay dos cosas que MapReduce hace NATIVELY: Ordenar y (implementado por género) GroupBy escalable.
La mayoría de las aplicaciones y Patrones de diseño sobre MapReduce se construyen sobre estas dos operaciones, que se proporcionan por orden aleatorio y ordenación.
En primer lugar, la shuffling
es el proceso de transferencia de datos desde 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 asignador). ) La reproducción aleatoria puede comenzar incluso antes de que la fase del mapa haya terminado, para ahorrar 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 para el reductor, lo que ayuda a distinguir fácilmente cuándo debe comenzar una nueva tarea de reducción. Simplemente comienza una nueva tarea de reducción, cuando la siguiente clave en los datos de entrada ordenados es diferente a la anterior, para decirlo simplemente. 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 de claves (valor), por lo que debe agrupar los valores por clave. Es fácil hacerlo, si los datos de entrada se ordenan previamente (localmente) en la fase del 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 hashing en las teclas 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 "copia" en esta figura):
Tenga en cuenta que la shuffling
y la sorting
no se realizan en absoluto si especifica cero reductores (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". Here está la parte interesante de tu pregunta.
Tom White ha sido un committer de Apache Hadoop desde febrero de 2007, y es miembro de la Apache Software Foundation, así que creo que es bastante creíble y oficial ...