Hadoop означает HDFS, YARN, MapReduce и многое другое. Вы имеете в виду Spark против MapReduce ? Потому что Spark работает на / с Hadoop, что довольно важно.
Основной причиной использования Spark является скорость, и это связано с тем, что его выполнение может хранить данные в памяти между этапами, а не всегда сохранять обратно в HDFS после Map или Reduce. Это преимущество очень заметно для итерационных вычислений, которые имеют десятки этапов, каждый из которых касается одних и тех же данных. Здесь все может быть в 100 раз быстрее. Для простых однопроходных ETL-подобных заданий, для которых была разработана MapReduce, в общем, это не быстрее.
Другой причиной использования Spark является более приятный язык высокого уровня по сравнению с MapReduce. Он предоставляет функциональное представление, похожее на программирование, которое имитирует Scala, что гораздо приятнее, чем написание кода MapReduce. (Хотя вы должны либо использовать Scala, либо принять немного менее развитые API Java или Python для Spark). Crunch и Cascading уже предоставляют аналогичную абстракцию поверх MapReduce, но это все еще область, где Spark хорош.
Наконец, у Spark есть еще молодые, но многообещающие подпроекты для ML, анализа графиков и потоковой передачи, которые предоставляют похожий, согласованный API. С MapReduce вам придется обратиться к нескольким другим проектам для этого (Mahout, Giraph, Storm). Приятно иметь его в одной упаковке, хотя еще не «запеченный».
Почему бы вам не использовать Spark? перефразируя себя:
- Spark - это в первую очередь Scala с портированными Java API; MapReduce может быть более дружественным и более родным для Java-разработчиков
- Сейчас существует больше опыта MapReduce, чем Spark
- Для параллельных данных, однопроходных, ETL-подобных заданий, для которых была разработана MapReduce, MapReduce легче по сравнению с аналогом Spark
- Spark довольно зрелый, как и YARN сейчас, но Spark-on-YARN все еще довольно новый. Эти два, возможно, еще не оптимально интегрированы. Например, до недавнего времени я не думал, что Spark может запросить YARN о распределениях, основанных на количестве ядер? То есть: MapReduce может быть проще для понимания, управления и настройки