¿Por qué es Spark más rápido que Hadoop Map Reduce?

¿Puede alguien explicar usando el ejemplo del conteo de palabras, por qué Spark sería más rápido que Map Reduce?

La respuesta de bafna proporciona el lado de la memoria de la historia, pero quiero agregar otros dos hechos importantes: DAG y ecosistema

  1. Spark usa “evaluación diferida” para formar un gráfico acíclico dirigido (DAG) de etapas de computación consecutivas. De esta forma, el plan de ejecución puede optimizarse, por ejemplo, para minimizar el intercambio de datos. Por el contrario, esto debe hacerse manualmente en MapReduce ajustando cada paso de MR. (Sería más fácil entender este punto si está familiarizado con la optimización del plan de ejecución en RDBMS o la ejecución estilo DAG de Apache Tez)
  2. El ecosistema Spark ha establecido una stack versátil de componentes para manejar tareas de SQL, ML, Streaming, Graph Mining. Pero en el ecosistema de hadoop tienes que instalar otros paquetes para hacer estas cosas individuales.

Y quiero agregar que, incluso si sus datos son demasiado grandes para la memoria principal, aún puede usar chispa al elegir mantener los datos en el disco. Aunque al hacerlo renuncias a las ventajas del procesamiento en memoria, aún puedes beneficiarte de la optimización de ejecución de DAG.

Algunas respuestas informativas sobre Quora: aquí y aquí .

Creo que hay tres razones principales.

Las dos razones principales se derivan del hecho de que, por lo general, uno no ejecuta un solo trabajo de MapReduce, sino más bien un conjunto de trabajos en secuencia.

  1. Una de las principales limitaciones de MapReduce es que persiste todo el conjunto de datos en HDFS después de ejecutar cada trabajo. Esto es muy costoso, ya que implica tres veces (para la replicación) el tamaño del conjunto de datos en la E / S de disco y una cantidad similar de E / S de red. Spark tiene una visión más holística de una cartera de operaciones. Cuando la salida de una operación necesita ser alimentada a otra operación, Spark pasa los datos directamente sin escribir en el almacenamiento persistente. Esta es una innovación sobre MapReduce que proviene del papel Dryad de Microsoft y no es original de Spark.

  2. La principal innovación de Spark fue introducir una abstracción de caché en memoria. Esto hace que Spark sea ideal para cargas de trabajo donde múltiples operaciones acceden a los mismos datos de entrada. Los usuarios pueden indicar a Spark que almacene en caché los conjuntos de datos de entrada en la memoria, de modo que no necesiten leerse del disco para cada operación.

  3. ¿Qué pasa con los trabajos de Spark que se reducirían a un solo trabajo de MapReduce? En muchos casos, también se ejecutan más rápido en Spark que en MapReduce. La principal ventaja que Spark tiene aquí es que puede iniciar tareas mucho más rápido. MapReduce inicia una nueva JVM para cada tarea, lo que puede llevar segundos cargar JAR, JITing, analizar XML de configuración, etc. Spark mantiene ejecutor JVM ejecutándose en cada nodo, por lo que iniciar una tarea es simplemente hacer una RPC y pasando un Runnable a un grupo de subprocesos, que toma en los únicos dígitos de milisegundos.

Por último, una idea equivocada común que probablemente vale la pena mencionar es que Spark de alguna manera se ejecuta completamente en la memoria, mientras que MapReduce no lo hace. Esto simplemente no es el caso. La implementación aleatoria de Spark funciona de manera muy similar a la de MapReduce: cada registro se serializa y se escribe en el disco en el lado del mapa y luego se busca y deserializa en el lado de la reducción.