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

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

Ответ 1

bafna отвечает на память, но я хочу добавить еще два важных факта: DAG и экосистема

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

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

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

Ответ 2

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

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

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

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

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

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