2009-10-07 7 views
30

Por lo que tengo entendido, MPI me da mucho más control sobre cómo se comunicarán exactamente los diferentes nodos en el clúster.¿Cuáles son algunos escenarios para los que MPI se ajusta mejor que MapReduce?

En MapReduce/Hadoop, cada nodo realiza algunos cálculos, intercambia datos con otros nodos y luego recopila su partición de resultados. Parece simple, pero dado que puede iterar el proceso, incluso los algoritmos como K-means o PageRank se ajustan bastante bien al modelo. En un sistema de archivos distribuidos con localidad de programación, el rendimiento es aparentemente bueno. En comparación, MPI me da un control explícito sobre cómo los nodos se envían mensajes entre ellos.

¿Alguien puede describir un escenario de programación de clúster donde el modelo más general de MPI es una ventaja obvia sobre el modelo más simple de MapReduce?

Respuesta

23

Casi cualquier código científico - diferencias finitas, elementos finitos, etc. Que tipo de conduce a la respuesta circular, que cualquier programa distribuido que no se asigne fácilmente a MapReduce se implementaría mejor con un modelo MPI más general. No estoy seguro de que sea de mucha ayuda para ti, rechazaré esta respuesta justo después de publicarla.

+5

Oh, no puedo menospreciar mis propias respuestas, podría alguien más para mí. –

+0

Gracias, Mark (no es necesario rechazarlo). ¿Quiere decir que los algoritmos iterativos son más eficientes en MPI, ya que en MapReduce tienen que implementarse con una secuencia de trabajos? Aparentemente, MapReduce tiene un rendimiento aceptable al menos para algunos algoritmos iterativos. –

+2

No realmente. Estaba pensando en cálculos como los solucionadores de diferencias finitas, en los que los procesos individuales (en procesadores individuales) se computan en una parte del dominio total, luego intercambian información de halo y luego continúan con la informática. Me resulta difícil ver cómo se correlacionaría con MapReduce. –

1

La mejor respuesta que podía llegar a MPI es que es mejor que MapReduce en dos casos:

  1. Para las tareas cortas en lugar de procesamiento por lotes. Por ejemplo, MapReduce no se puede usar para responder a consultas individuales; se espera que cada trabajo tarde unos minutos. Creo que en MPI, puede construir un sistema de respuesta de consulta donde las máquinas se envían mensajes entre sí para enrutar la consulta y generar la respuesta.

  2. Para los trabajos de los nodos tienen que comunicarse más de lo reiteró el apoyo trabajos MapReduce, pero no demasiado, por lo que los gastos generales de comunicación hacen el cálculo práctico. Sin embargo, no estoy seguro de cuán a menudo ocurren tales casos en la práctica.

+1

las tareas de reducción de mapa también pueden tomar milisegundos, no es necesario decir que deben tomarse minutos – Zubair

19

Athough, esta pregunta ha sido respondida, me gustaría agregar/reiterar un punto muy importante.

MPI es ideal para problemas que requieren mucha comunicación entre procesos.

Cuando los datos se vuelven grandes (petabytes, ¿alguien?), Y hay poca comunicación entre procesos, MPI se convierte en un dolor. Esto es así porque los procesos pasarán todo el tiempo enviándose datos entre sí (el ancho de banda se convierte en un factor limitante) y sus CPU permanecerán inactivas. Quizás un problema aún mayor es leer todos esos datos.

Esta es la razón fundamental detrás de tener algo como Hadoop. Los datos también tienen que ser distribuidos - ¡Sistema de archivos distribuidos de Hadoop!

Para decir todo esto en pocas palabras, MPI es bueno para el paralelismo de tareas y Hadoop es bueno para el Paralelismo de datos.

+18

Esto es algo inexacto. Un enfoque principal de MPI son los algoritmos de descomposición de dominio, un dominio altamente paralelo a los datos, pero con cierta comunicación entre los subdominios. Los datos se pueden almacenar localmente con MPI también. MPI es bueno cuando el patrón de comunicación tiene alguna localidad y en cualquier momento necesita reducciones de baja latencia. MapReduce/Hadoop es bueno cuando la tolerancia a fallas es más importante que el rendimiento absoluto. – Jed

0

Espero que MPI supere fácilmente a MapReduce cuando la tarea se itera sobre un conjunto de datos cuyo tamaño es comparable con el caché del procesador, y cuando se requiere con frecuencia la comunicación con otras tareas. Muchos enfoques de paralelización de dominio científico-descomposición se ajustan a este patrón. Si MapReduce requiere procesamiento y comunicación secuencial, o finalización de procesos, entonces se pierde el beneficio de rendimiento computacional al tratar con un problema del tamaño de la memoria caché.

1

Cuando el cálculo y los datos que está utilizando tienen comportamientos irregulares que en su mayoría se traducen en muchos pasos de mensajes entre objetos, o cuando necesita accesos de bajo nivel de nivel de hardware, p. RDMA luego MPI es mejor. En algunas respuestas que se ven aquí se menciona la latencia de las tareas o el modelo de consistencia de la memoria, marcos como Spark o Actor Models como AKKA han demostrado que pueden competir con MPI. Finalmente, se debe considerar que MPI tiene el beneficio de ser durante años la base principal para el desarrollo de las bibliotecas necesarias para los cálculos científicos (estas son las partes faltantes más importantes que faltan en los nuevos marcos usando los modelos DAG/MapReduce).

En general, creo que los beneficios que los modelos MapReduce/DAG están trayendo a la mesa como los administradores de recursos dinámicos, y el cálculo de tolerancia a fallas harán que sean factibles para los grupos de computación científica.

Cuestiones relacionadas