Estoy leyendo sobre MapReduce y lo siguiente me confunde.Ordenando datos grandes usando MapReduce/Hadoop
Supongamos que tenemos un archivo con 1 millón de entradas (enteros) y queremos ordenarlos usando MapReduce. La forma en que entendí para hacerlo fue la siguiente:
Escribir una función de correlacionador que clasifique enteros. Por lo tanto, el marco dividirá el archivo de entrada en múltiples fragmentos y los entregará a diferentes mapeadores. Cada mapeador clasificará su fragmento de datos de forma independiente el uno del otro. Una vez que todos los mapeadores hayan terminado, pasaremos cada uno de sus resultados a Reducer y combinará el resultado y me dará el resultado final.
Mi duda es que, si tenemos un reductor, ¿cómo puede aprovechar el marco distribuido si, finalmente, tenemos que combinar el resultado en un solo lugar ?. El problema se reduce a la fusión de 1 millón de entradas en un solo lugar. ¿Es eso o me falta algo?
Gracias, Chander
Y el reductor puede comenzar a dar resultados cuando obtiene el primer resultado de cada asignador que permite (en el caso de un tipo de fusión) hacer el proceso (fusión) al dar la salida, es una gran mejora en tiempo y memoria. – helios
Es constante si siempre usa la misma cantidad de correlacionadores. Genéricamente hablando, es O (M log N) para combinar elementos M en N listas si utiliza un montón mínimo, y O (M * N) para el enfoque "ingenuo". Pero sí, como esperaría M >> N, es básicamente lineal. – SquareCog
También hay una explicación práctica de que en el término "corto" sus recursos, es decir, núcleos de CPU, es constante y requiere la aprobación de la administración para aumentar M. Por lo tanto, M parece la pirámide azteca con varios pasos "constantes". –