¿Cómo se puede usar MapReduce en problemas de optimización?

En general, los problemas de optimización (especialmente los de segundo orden) con un gran número de variables y restricciones no son adecuados para la realización a escala sobre Map-Reduce (MR), si restringimos MR a Hadoop MR. Esto se debe principalmente a 2 razones: falta de trabajos de MR de larga duración y falta de soporte informático en memoria.

Sin embargo, hay otras realizaciones de MR como Twister (Iterative MapReduce) o HaLoop (haloop – Una versión modificada de Hadoop para admitir el procesamiento de datos iterativo eficiente en grandes grupos de productos básicos – Google Project Hosting) que supera las limitaciones anteriores y proporciona memoria caché en memoria así como larga vida a los trabajos de MR. Estos pueden ser buenos candidatos para obtener soluciones a los problemas de optimización, incluso los de segundo orden. Sin embargo, la tolerancia a fallos es un problema abierto en ambos. Esto implica que la tolerancia a fallos proporcionada por estas realizaciones de MR no está cerca de Hadoop MR.

Esto nos deja con alternativas decrecientes para problemas de optimización: Spark (Lightning-Fast Cluster Computing) del equipo de UC Berkeley AmpLabs es una alternativa interesante. Debido a su capacidad para admitir cálculos iterativos en memoria y su enfoque único de manejo de fallas (basado en el concepto de un linaje gráfico), se pueden resolver problemas complejos de optimización a través de Spark. Esto está ilustrado por ML Lib [1] (MLbase).

[1] T. Kraska, A. Talwalkar, J.Duchi, R. Griffith, M. Franklin, MI Jordan. MLbase: un sistema distribuido de aprendizaje automático . En Conferencia sobre Investigación de Sistemas de Datos Innovadores, 2013.

No usaría mapreduce para esto, hay demasiados cálculos de ida y vuelta que no son adecuados para mapreduce. Para big data, usaría el descenso de gradiente estocástico y lo haría en línea o si tuviera que calcular su gradiente en un lote, hacerlo con un servicio RPC con cada máquina calculando el gradiente para un pequeño subconjunto. Después de haberlo hecho muchas veces, diría que he tenido mejores resultados con el enfoque de aprendizaje en línea.
Si * tiene * que usar mapreduce, puede alimentar sus datos con el mapeador y luego realizar el aprendizaje en línea en un solo reductor.

Mapreduce framework desafortunadamente se desempeña muy mal en tareas de procesamiento iterativo como el procesamiento de gráficos. El problema clave es que la reducción de mapas opera en la localidad de datos pero está diseñada para la comunicación más baja entre nodos, la mayoría de los algoritmos iterativos se resuelven mucho mejor en el algoritmo BSP en lugar de la reducción de mapas. Los algoritmos BSP se procesan mucho mejor al aprovechar sistemas como neo4j a pequeña escala o Giraph & Hama a gran escala.
El mapa de razones clave reduce las fallas, ya que hace que los datos se materialicen y almacenen en cada iteración, y cada información almacenada se replica en las máquinas, lo que causa un disco y una E / S de red de gran tamaño en cada iteración. Un nuevo participante en este espacio que evita estos problemas específicos es Spark. Este sistema evita ambos problemas al fusionar iteraciones y materializar datos solo cuando es necesario. También almacena y retiene datos en la memoria, lo que permite un procesamiento iterativo más rápido.
Hemos creado varios prototipos en torno al aprendizaje automático en Spark para una iteración más rápida y flexible usando Scala y Java.