Почему Apache Spark быстрее, чем Hadoop MapReduce [дубликат]

new Date().toLocaleDateString()

// "3/21/2018"

Дополнительная документация на developer.mozilla.org

2
задан Daniel Darabos 16 August 2015 в 11:16
поделиться

2 ответа

Spark tries to keep things in memory, whereas MapReduce keeps shuffling things in and out of disk. Среднее промежуточное хранилище в основной памяти, где в качестве промежуточного результата в промежуточной памяти используется промежуточное хранилище. MapReduce вставляет барьеры, и требуется много времени, чтобы написать вещи на диск и прочитать их обратно. Следовательно MapReduce может быть медленным и трудоемким. Устранение этого ограничения ускоряет порядок Spark. Для таких вещей, как SQL-движки, такие как Hive, обычно требуется цепочка операций MapReduce, и для этого требуется много операций ввода-вывода. На диск, с диска на диск, с диска. Когда подобные операции запускаются на Spark, Spark может хранить вещи в памяти без ввода-вывода, поэтому вы можете быстро работать с одними и теми же данными. Это приводит к резкому повышению производительности, и это означает, что Spark определенно перемещает нас по крайней мере в интерактивную категорию. Для записи есть некоторые преимущества, которые MapReduce выполняет всю эту запись на диск - так как запись всего на диск позволяет перезапустить после сбоя. Если вы используете многочасовую работу, вы не хотите начинать с нуля. Для приложений на Spark, которые работают в секундах или минутах, перезапуск, очевидно, не является проблемой.

It’s easier to develop for Spark. Spark является гораздо более мощным и выразительным с точки зрения того, как вы даете ему инструкции по сжатию данных. У Spark есть функция Map и Reduce, такая как MapReduce, но она добавляет другие, такие как Filter, Join и Group-by, поэтому ее легче разрабатывать для Spark.

Spark also adds libraries for doing things like machine learning, streaming, graph programming and SQL
2
ответ дан Kishore 26 August 2018 в 18:19
поделиться

В Hadoop MapReduce входные данные находятся на диске, вы выполняете карту и уменьшаете и возвращаете результат на диск. Apache Spark позволяет более сложные трубопроводы. Возможно, вам нужно сопоставить дважды, но не нужно уменьшать. Возможно, вам нужно уменьшить карту, а затем снова уменьшить. API-интерфейс Spark очень удобен для создания очень сложных конвейеров с десятками шагов.

Вы также можете реализовать тот же сложный конвейер с MapReduce. Но затем между каждым этапом вы пишете на диск и читаете его обратно. Spark избегает этих накладных расходов, когда это возможно. Хранение данных в памяти - это один из способов. Но очень часто даже это не нужно. Один этап может просто передать вычисленные данные на следующий этап, не сохраняя при этом всех данных.

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

API, особенно в Scala, тоже очень чист. Классический MapReduce часто является одной строкой. Это очень удобно использовать.

4
ответ дан Daniel Darabos 26 August 2018 в 18:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: