¿Es el almacenamiento en caché la única ventaja de Spark sobre Map-Reduce?

Resuelto Knows Not Much asked hace 10 años • 5 respuestas

Empecé a aprender sobre Apache Spark y estoy muy impresionado con el marco. Aunque una cosa que me sigue molestando es que en todas las presentaciones de Spark hablan de cómo Spark almacena en caché los RDD y, por lo tanto, múltiples operaciones que necesitan los mismos datos son más rápidas que otros enfoques como Map Reduce.

Entonces, la pregunta que tenía es que si este es el caso, simplemente agregue un motor de almacenamiento en caché dentro de los marcos MR como Yarn/Hadoop.

¿Por qué crear un marco completamente nuevo?

Estoy seguro de que me falta algo aquí y podrá indicarme alguna documentación que me instruya más sobre Spark.

Knows Not Much avatar Jul 12 '14 03:07 Knows Not Much
Aceptado

El almacenamiento en caché + en el cálculo de la memoria es definitivamente una gran cosa para Spark, sin embargo, hay otras cosas.


RDD (conjunto de datos distribuidos resilientes): un RDD es la abstracción principal de Spark. Permite la recuperación de nodos fallidos mediante el nuevo cálculo del DAG y, al mismo tiempo, admite un estilo de recuperación más similar a Hadoop mediante puntos de control, para reducir las dependencias de un RDD. Almacenar un trabajo de Spark en un DAG permite un cálculo diferido de los RDD y también puede permitir que el motor de optimización de Spark programe el flujo de manera que marque una gran diferencia en el rendimiento.


Spark API: Hadoop MapReduce tiene una API muy estricta que no permite tanta versatilidad. Dado que Spark abstrae muchos de los detalles de bajo nivel, permite una mayor productividad. Además, cosas como variables de transmisión y acumuladores son mucho más versátiles que DistributedCache y los contadores en mi opinión.


Spark Streaming: Spark Streaming se basa en un documento Discretized Streams, que propone un nuevo modelo para realizar cálculos en ventanas en transmisiones utilizando micro lotes. Hadoop no admite nada como esto.


Como producto del cálculo en memoria, la chispa actúa como su propio programador de flujo. Mientras que con MR estándar necesita un programador de trabajos externo como Azkaban u Oozie para programar flujos complejos.


El proyecto hadoop está compuesto por MapReduce, YARN, commons y HDFS; Sin embargo, Spark está intentando crear una plataforma de big data unificada con bibliotecas (en el mismo repositorio) para aprendizaje automático, procesamiento de gráficos, transmisión por secuencias, múltiples bibliotecas de tipo SQL y creo que una biblioteca de aprendizaje profundo se encuentra en las etapas iniciales. Si bien nada de esto es estrictamente una característica de Spark, es un producto del modelo informático de Spark. Tachyon y BlinkDB son otras dos tecnologías basadas en Spark.

aaronman avatar Jul 11 '2014 20:07 aaronman

Por tanto, es mucho más que sólo el almacenamiento en caché. Aaronman cubrió mucho, así que solo agregaré lo que se perdió.

El rendimiento bruto sin almacenamiento en caché es entre 2 y 10 veces más rápido debido a un marco generalmente más eficiente y bien diseñado. Por ejemplo, 1 jvm por nodo con subprocesos akka es mejor que bifurcar un proceso completo para cada tarea.

API de escala. Scala significa lenguaje escalable y es claramente el mejor lenguaje para elegir para el procesamiento paralelo. Dicen que Scala reduce el código entre 2 y 5 veces, pero en mi experiencia al refactorizar código en otros lenguajes, especialmente el código java mapreduce, es más bien entre 10 y 100 veces menos código. En serio, he refactorizado cientos de LOC de Java en un puñado de Scala/Spark. También es mucho más fácil de leer y razonar. Spark es incluso más conciso y fácil de usar que las herramientas de abstracción de Hadoop como pig & hive, y es incluso mejor que Scalding.

Spark tiene una respuesta/shell. Se elimina la necesidad de un ciclo de compilación-implementación para ejecutar trabajos simples. Uno puede jugar interactivamente con datos tal como uno usa Bash para husmear en un sistema.

Lo último que me viene a la mente es la facilidad de integración con bases de datos de Big Table, como cassandra y hbase. En caso de leer una tabla para hacer algún análisis, simplemente se hace

sc.cassandraTable[MyType](tableName).select(myCols).where(someCQL)

Se esperan cosas similares para HBase. ¡¡Ahora intenta hacerlo en cualquier otro marco MPP!!

ACTUALIZACIÓN Pensé en señalar que estas son solo las ventajas de Spark, además hay bastantes cosas útiles. Por ejemplo, GraphX ​​para procesamiento de gráficos, MLLib para aprendizaje automático sencillo, Spark SQL para BI, BlinkDB para consultas apprx increíblemente rápidas y, como se mencionó, Spark Streaming.

samthebest avatar Jul 12 '2014 08:07 samthebest