2012-01-12 15 views
5

Estoy desarrollando una mejora en el marco Spark (http://www.spark-project.org/). Spark es un proyecto de UC Berkeley que hace MapReduce rápidamente en RAM. Spark está construido en Scala.¿Cuál sería una buena aplicación para una versión mejorada de MapReduce que comparte información entre Mappers?

La mejora que estoy construyendo permite que algunos datos se compartan entre los mapeadores mientras están computando. Esto puede ser útil, por ejemplo, si cada uno de los mapeadores está buscando una solución óptima, y ​​todos quieren compartir la mejor solución actual (para eliminar las malas soluciones de manera temprana). La solución puede estar un poco desactualizada a medida que se propaga, pero esto debería acelerar la solución. En general, esto se denomina enfoque de ramificación y límite.

Podemos compartir cantidades cada vez mayores, pero también podemos compartir matrices y diccionarios.

También estamos buscando aplicaciones de aprendizaje automático donde los cartógrafos describen la información del gradiente natural local, y luego se comparte una nueva mejor solución óptima actual entre todos los nodos.

¿Cuáles son algunas otras buenas aplicaciones reales de este tipo de mejora? Qué tipos de aplicaciones reales y útiles pueden beneficiarse de un Mapa Reduzca el cálculo con solo un poco de intercambio de información entre los creadores de mapas. ¿Qué aplicaciones usan MapReduce o Hadoop en este momento, pero son un poco lentas debido a la restricción de independencia de la fase del mapa?

El beneficio puede ser acelerar la fase del mapa o mejorar la solución.

+0

He usado zookeeper para esto antes. –

+0

Hay un documento de investigación reciente llamado "Adaptive MapReduce usando Situation-Aware Mappers" ([PDF] (http://www.edbt.org/Proceedings/2012-Berlin/papers/edbt/a45-vernica.pdf); [slides ] (https://www.ics.uci.edu/~rares/pub/edbt12-vernica-slides.pdf)) que describe un sistema donde los mapeadores se pueden comunicar entre sí a través de un almacén de metadatos distribuido (ZooKeeper). Esto se usa para implementar varias optimizaciones adaptativas de tiempo de ejecución. –

Respuesta

4

La mejora que estoy construyendo permite que algunos datos se compartan entre los mapeadores mientras están computando.

Apache Giraph se basa en Google Pregel que se basa en BSP y se utiliza para el procesamiento gráfico. En BSP, hay intercambio de datos entre los procesos en la fase de comunicación.

Giraph depende de Hadoop para la implementación. En general, no existe comunicación entre los mapeadores en MapReduce, pero en Giraph los mapeadores se comunican entre sí durante la fase de comunicación de BSP.

También te puede interesar Apache Hama que implementa BSP y se puede usar para más que el procesamiento de gráficos.

Puede haber alguna razón por la cual los mapeadores no se comunican en el MR. ¿Has considerado estos factores en tu mejora?

¿Cuáles son algunas otras buenas aplicaciones reales de este tipo de realce?

El procesamiento de gráficos es una cosa que se me ocurre, similar a Giraph. Verifique los diferentes casos de uso para BSP, algunos podrían ser aplicables para este tipo de mejora. También estoy muy interesado en lo que otros tienen que decir sobre esto.

+0

Recientemente utilicé BSP para varias tareas de aprendizaje automático, e.G. al azar forrests y k-means clustering. –

+0

@ThomasJungblut - El OP era sobre el uso de la comunicación entre los mapeadores. Entonces, si los bosques aleatorios y los clusters k-means se implementan en MR, ¿podrían aprovechar la comunicación entre los mapeadores? Si no estoy equivocado, cualquier cosa que tenga muchas iteraciones podría aprovechar la comunicación entre los mapeadores. –

+0

No, solo puede guardar las iteraciones reemplazándolas por BSP. La comunicación dentro de los mapeadores no le dará el resultado. Sin embargo, puede mapear todo en RAM y hacer la comunicación en la tarea de mapa. Este sería un sistema como giraph entonces. –

Cuestiones relacionadas