parallel processing - Apache Spark vs Akka
parallel-processing apache-spark (4)
Apache Spark en realidad se basa en Akka.
Akka es un marco de uso general para crear aplicaciones concurrentes reactivas, distribuidas, paralelas y resistentes en Scala o Java. Akka utiliza el modelo de actor para ocultar todo el código relacionado con hilos y le brinda interfaces realmente simples y útiles para implementar un sistema escalable y tolerante a fallas fácilmente. Un buen ejemplo para Akka es una aplicación en tiempo real que consume y procesa datos provenientes de teléfonos móviles y los envía a algún tipo de almacenamiento.
Apache Spark (no Spark Streaming) es un marco para procesar datos por lotes utilizando una versión generalizada del algoritmo de reducción de mapas. Un buen ejemplo para Apache Spark es el cálculo de algunas métricas de datos almacenados para obtener una mejor visión de sus datos. Los datos se cargan y procesan bajo demanda.
Apache Spark Streaming puede realizar acciones y funciones similares en pequeños lotes de datos casi en tiempo real de la misma manera que lo haría si los datos ya estuvieran almacenados.
ACTUALIZACIÓN ABRIL 2016
Desde Apache Spark 1.6.0, Apache Spark ya no depende de Akka para la comunicación entre nodos. Gracias a @EugeneMi por el comentario.
¿Podría decirme la diferencia entre Apache Spark y AKKA? Sé que ambos marcos pretenden programar cálculos distribuidos y paralelos, pero no veo el enlace o la diferencia entre ellos.
Además, me gustaría obtener los casos de uso adecuados para cada uno de ellos.
La elección entre Apache Spark, Akka o Kafka está muy inclinada hacia el caso de uso (en particular, el contexto y los antecedentes de los servicios que se diseñarán) en el que se están implementando. Algunos de los factores incluyen latencia, volumen, integraciones de terceros y la naturaleza del procesamiento requerido (como lote o transmisión, etc.). Encontré que este recurso es de particular ayuda: https://conferences.oreilly.com/strata/strata-ca-2016/public/schedule/detail/47251
Spark es para el procesamiento de datos, lo que Akka es para administrar el flujo de datos e instrucciones en una aplicación.
TL; DR
Spark y Akka son dos marcos diferentes con diferentes usos y casos de uso.
Al crear aplicaciones, distribuidas o de otro tipo, es posible que sea necesario programar y administrar tareas a través de un enfoque paralelo, como el uso de subprocesos. Imagine una gran aplicación con muchos hilos. ¿Qué tan complicado sería eso?
El kit de herramientas Akka de TypeSafe (ahora llamado Lightbend) le permite utilizar sistemas Actor (originalmente derivados de Erlang) que le brinda una capa de abstracción sobre hilos. Estos actores pueden comunicarse entre sí pasando cualquier cosa y todo como mensajes, y hacen cosas paralelas y sin bloquear otro código.
Akka te da una guinda en la cima al proporcionarte formas de ejecutar a los actores en un entorno distribuido.
Apache Spark, por otro lado, es un marco de procesamiento de datos para conjuntos de datos masivos que no se pueden manejar manualmente. Spark utiliza lo que llamamos un RDD (o conjuntos de datos distribuidos resilientes) que se distribuye como una capa de abstracción sobre sus estructuras de datos tradicionales para que las operaciones se puedan realizar en diferentes nodos paralelos entre sí.
Spark utiliza el kit de herramientas de Akka para programar trabajos entre diferentes nodos.
Apache Spark:
Apache Spark ™ es un motor rápido y general para el procesamiento de datos a gran escala.
Spark ejecuta programas hasta 100 veces más rápido que Hadoop MapReduce en la memoria, o 10 veces más rápido en el disco.
Spark nos brinda un marco integral y unificado para administrar los requisitos de procesamiento de big data con una variedad de conjuntos de datos de naturaleza diversa (datos de texto, datos de gráficos, etc.), así como la fuente de datos (lote v. Datos de transmisión en tiempo real) .
-
Se integra bien con el ecosistema Hadoop y las fuentes de datos ( HDFS, Amazon S3, Hive, HBase, Cassandra , etc.)
-
Puede ejecutarse en clústeres administrados por Hadoop YARN o Apache Mesos , y también puede ejecutarse en modo independiente
-
Proporciona API en Scala, Java y Python , con soporte para otros lenguajes (como R) en el camino
-
Además de las operaciones Map and Reduce, admite consultas SQL , transmisión de datos, aprendizaje automático y procesamiento de datos gráficos.
Deberíamos considerar Spark como una alternativa a Hadoop MapReduce en lugar de un reemplazo a Hadoop.
Eche un vistazo a infoQ y artículos de toptal para una mejor comprensión.
Principales casos de uso de Spark:
- Algoritmos de aprendizaje automático
- Analítica interactiva
- Streaming de datos
Akka: de Letitcrash
Akka es un marco de middleware basado en eventos, para construir aplicaciones distribuidas confiables y de alto rendimiento en Java y Scala. Akka desacopla la lógica empresarial de los mecanismos de bajo nivel, como subprocesos, bloqueos y E / S sin bloqueo. Con Akka, puede configurar fácilmente cómo los actores serán creados, destruidos, programados y reiniciados en caso de falla.
Eche un vistazo a este artículo de tipo typesafe para comprender mejor el marco de Actor.
Akka proporciona tolerancia a fallos basada en jerarquías de supervisor. Cada Actor puede crear otros Actores, que luego supervisará, tomando decisiones si deben reanudarse, reiniciarse, retirarse o si el problema debe escalarse.
Echa un vistazo al artículo de Akka y preguntas SO
Principales casos de uso:
- Procesamiento de transacciones
- Concurrencia / paralelismo
- Simulación
- Procesamiento por lotes
- Juegos y Apuestas
- Procesamiento de flujo de eventos complejos