Две копейки про MR vs Spark.
1. Spark быстрее за счет: меньшего количества обращения к диску (мин один цикл чтения и записи на stage для shuffle в локальный диск, у хадупного mr кажется два или три, не помню точно, но на практике обычно больше); наличие DAG и продвинутого оптимизатора, а также хорошего execution engine с кодогенерацией, кеши, локальность.
2. Если spark операторы начинают делать spill на диск, скорость уже сравнима с MR (добавляем лишние обращения к диску).
3. Формально, spark очень близок к модели MR, потому что связанные stages все равно выполняются последовательно. Архитектурно, это то же развитие MR. Реальная альтернатива, это true streaming движки, поверх акторной модели, где упор сделан на минимизацию latency. Одну конкретную запись можно протолкнуть через весь пайплайн, применяя вычисления одно за другим, без задержек.
4. Даже продвинутые движки MR (не хадуп), у которых есть операции sort или mapreduce (как единая операция), можественный reduce (для star join) все равно проигрывают спарку в wall clock.
5. Большие кластера спарк (больше 10000 ядер, больше 1000 нод) кажется ранее были проблемой. Сейчас - хз, но вроде я слышал про кластер в неск. тыс нод.