Почему Spark быстрее, чем Hadoop Map Reduce

Может кто-нибудь объяснить, используя пример подсчета слов, почему Spark будет быстрее, чем Map Reduce?

Ответ бафны дает информацию о памяти, но я хочу добавить еще два важных факта: ДАГ и экосистема

  1. Spark использует «ленивую оценку» для формирования ориентированного ациклического графа (DAG) последовательных этапов вычислений. Таким образом, план выполнения может быть оптимизирован, например, чтобы минимизировать перетасовку данных. Напротив, это должно быть сделано вручную в MapReduce путем настройки каждого шага MR. (Было бы легче понять этот момент, если вы знакомы с оптимизацией плана выполнения в СУРБД или при выполнении Apache Tez в стиле DAG)
  2. Спарк-экосистема создала универсальный стек компонентов для обработки задач SQL, ML, Streaming, Graph Mining. Но в экосистеме hadoop вам нужно установить другие пакеты, чтобы делать эти индивидуальные вещи.

И я хочу добавить, что даже если ваши данные слишком велики для основной памяти, вы все равно можете использовать искру , пытаясь сохранить данные на диске. Хотя при этом вы отказываетесь от преимуществ обработки в памяти, вы все равно можете воспользоваться оптимизацией исполнения DAG.

Некоторые информативные ответы на Quora: здесь и здесь .

Я думаю, что есть три основные причины.

Основные две причины связаны с тем, что, как правило, не выполняется одно задание MapReduce, а множество заданий в последовательности.

  1. Одним из основных ограничений MapReduce является то, что он сохраняет полный dataset для HDFS после запуска каждого задания. Это очень дорого, потому что оно в три раза (для репликации) приводит к увеличению размера набора данных в дисковых вводах и аналогичном количестве сетевых операций ввода-вывода. Искра занимает более целостное представление о трубопроводе операций. Когда вывод операции должен быть передан в другую операцию, Spark передает данные напрямую, не записывая в постоянное хранилище. Это новшество в отношении MapReduce, которое появилось в бумаге Microsoft от Dryad, и не является оригинальным для Spark.

  2. Главной новинкой Spark было введение абстракции кэширования в памяти. Это делает Spark идеальным для рабочих нагрузок, когда несколько операций получают доступ к тем же входным данным. Пользователи могут поручить Spark кэшировать наборы входных данных в памяти, поэтому их не нужно читать с диска для каждой операции.

  3. Как насчет работы Spark, которая сводится к одной задаче MapReduce? Во многих случаях они также работают быстрее на Spark, чем на MapReduce. Основное преимущество Spark заключается в том, что он может запускать задачи намного быстрее. MapReduce запускает новую JVM для каждой задачи, которая может занять несколько секунд с загрузкой JAR, JITing, parsingом конфигурации XML и т. Д. Spark поддерживает JVM-исполнитель, работающий на каждом узле, поэтому запуск задачи – это просто вопрос создания RPC для нее и передавая Runnable в пул streamов, который принимает одиночные цифры миллисекунд.

Наконец, общее заблуждение, вероятно, стоит упомянуть, что Spark как-то работает полностью в памяти, а MapReduce – нет. Это просто не тот случай. Реализация Shuffle от Spark очень похожа на MapReduce: каждая запись сериализуется и записывается на диск со стороны карты, а затем извлекается и десериализуется на стороне уменьшения.

  • объединить выходные файлы после фазы уменьшения
  • Лучший способ сделать один-ко-многим «JOIN» в CouchDB
  • hadoop: разница между 0 редуктором и редуктором идентичности?
  • Гарантирует ли заказ MongoDB $ in
  • Hadoop DistributedCache устарел - какой предпочтительный API?
  • Использование map / reduce для отображения свойств в коллекции
  • Какова цель фаз перетасовки и сортировки в редукторе в Программе сокращения карты?
  • Поддержка gzip в Spark
  • Является ли структура агрегации Mongodb быстрее, чем карта / сокращение?
  • Установка количества задач карты и сокращение задач
  • Где hasoop mapreduce framework отправляет мои инструкции System.out.print ()? (стандартный вывод)
  • Давайте будем гением компьютера.