2010-03-29 11 views

Respuesta

31

Una diferencia clave es que F-J parece estar diseñado para trabajar en una sola máquina virtual Java, mientras que M-R está diseñado explícitamente para funcionar en un gran grupo de máquinas. Estos son escenarios muy diferentes.

F-J ofrece instalaciones para dividir una tarea en varias subtareas, de forma recursiva; más niveles, posibilidad de comunicación 'entre tenedor' en esta etapa, programación mucho más tradicional. No se extiende (al menos en el papel) más allá de una sola máquina. Ideal para aprovechar su ocho núcleos.

M-R solo hace una gran división, con los splits mapeados sin hablar entre sí, y luego reduce todo junto. Un nivel único, sin comunicación entre divisiones hasta reducir y masivamente escalable. Ideal para aprovechar tu parte de la nube.

+8

Más específicamente, F-J permite a los trabajadores robar subtareas de las colas de los demás. Esto no es posible si los subprocesos de trabajo están en máquinas diferentes (y por lo tanto no tienen memoria compartida). – finnw

+2

De acuerdo con la entrada de [MapReduce Wikipedia] (http://en.wikipedia.org/wiki/MapReduce), MR no es necesariamente restringido a un único nivel de tareas bifurcadas. –

+0

¿cuál es la diferencia entre fork/join & mapreduce fuera del contexto de Java? – user2001850

10

Hay todo un artículo científico sobre el tema, Comparing Fork/Join and MapReduce.

El documento compara el rendimiento, la escalabilidad y la programabilidad de tres paradigmas paralelos: fork/join, MapReduce y un enfoque híbrido.

Lo que encuentran es básicamente que Java tenedor/unirse tiene una baja latencia de inicio y escala bien para entradas pequeñas (< de 5 MB), pero no puede procesar entradas más grandes debido a las restricciones de tamaño de memoria compartida, individuales arquitecturas de nodo. Por otro lado, MapReduce tiene una latencia de inicio significativa (decenas de segundos), pero se adapta bien a las entradas mucho más grandes (> 100 MB) en un clúster de cálculo.

Pero hay mucho más para leer allí si está dispuesto a hacerlo.