Hadoop significa HDFS, YARN, MapReduce y muchas otras cosas. ¿Te refieres a Spark vs MapReduce ? Porque Spark se ejecuta en / con Hadoop, que es más bien el punto.
La razón principal para usar Spark es la velocidad, y esto viene del hecho de que su ejecución puede mantener los datos en la memoria entre etapas en lugar de persistir siempre en HDFS después de un Mapa o Reducir. Esta ventaja es muy pronunciada para los cálculos iterativos, que tienen decenas de etapas, cada una de las cuales toca los mismos datos. Aquí es donde las cosas podrían ser "100x" más rápido. Para trabajos simples, de un solo paso tipo ETL para los que se diseñó MapReduce, en general no es más rápido.
Otra razón para usar Spark es su mejor lenguaje de alto nivel en comparación con MapReduce. Proporciona una vista funcional similar a la programación que imita Scala, que es mucho mejor que escribir código MapReduce. (Aunque debe usar Scala o adoptar las API de Java o Python un poco menos desarrolladas para Spark). Crunch and Cascading ya proporcionan una abstracción similar en la parte superior de MapReduce, pero esta sigue siendo un área donde Spark es agradable.
Finalmente, Spark tiene subproyectos aún jóvenes pero prometedores para ML, análisis de gráficos y transmisión, que exponen una API similar y coherente. Con MapReduce, tendrías que recurrir a varios proyectos diferentes para esto (Mahout, Giraph, Storm). Es bueno tenerlo en un paquete, aunque aún no esté 'horneado'.
¿Por qué no usarías Spark? parafraseándome a mí mismo:
- Spark es principalmente Scala, con API Java portadas; MapReduce podría ser más amigable y más nativo para desarrolladores basados en Java
- Ahora hay más experiencia en MapReduce que Spark
- Para los trabajos paralelos a datos, de una sola pasada, similares a ETL para los que MapReduce fue diseñado, MapReduce es más liviano en comparación con el equivalente de Spark
- Spark es bastante maduro, y ahora también lo es YARN, pero Spark-on-YARN todavía es bastante nuevo. Es posible que los dos aún no estén integrados de manera óptima. Por ejemplo, hasta hace poco, ¿no creo que Spark pueda pedirle a YARN asignaciones basadas en el número de núcleos? Es decir: MapReduce podría ser más fácil de entender, administrar y ajustar