machine-learning apache-spark apache-flink

machine learning - Apache Flink vs Apache Spark como plataformas para el aprendizaje automático a gran escala?



machine-learning apache-spark (1)

Descargo de responsabilidad: soy un miembro de PMC de Apache Flink. Mi respuesta se centra en las diferencias de ejecución de iteraciones en Flink y Spark.

Apache Spark ejecuta iteraciones mediante el despliegue de bucles. Esto significa que para cada iteración se programa y ejecuta un nuevo conjunto de tareas / operadores. Spark lo hace de manera muy eficiente porque es muy bueno en la programación de tareas de baja latencia (el mismo mecanismo se usa para la transmisión de Spark por cierto) y almacena datos en memoria en la memoria en todas las iteraciones. Por lo tanto, cada iteración opera sobre el resultado de la iteración anterior que se mantiene en la memoria. En Spark, las iteraciones se implementan como bucles for foráneos (ver ejemplo de Regresión logística ).

Flink ejecuta programas con iteraciones como flujos de datos cíclicos. Esto significa que un programa de flujo de datos (y todos sus operadores) está programado solo una vez y los datos se retroalimentan desde la cola de una iteración hasta su encabezado. Básicamente, los datos fluyen en ciclos alrededor de los operadores dentro de una iteración. Dado que los operadores solo se programan una vez, pueden mantener un estado en todas las iteraciones. La API de Flink ofrece dos operadores de iteración dedicados para especificar iteraciones: 1) iteraciones masivas, que son conceptualmente similares al desenrollado del bucle, y 2) iteraciones delta . Las iteraciones de Delta pueden acelerar significativamente ciertos algoritmos porque el trabajo en cada iteración disminuye a medida que avanza el número de iteraciones. Por ejemplo, la décima iteración de una implementación de PageR de iteración delta completa mucho más rápido que la primera iteración.

¿Alguien podría comparar Flink y Spark como plataformas para el aprendizaje automático? ¿Cuál es potencialmente mejor para los algoritmos iterativos? Enlace a la discusión general de Flink vs Spark: ¿Cuál es la diferencia entre Apache Spark y Apache Flink?