Является ли кеширование единственным преимуществом искры по сравнению с уменьшением карты?

Я начал изучать Apache Spark и очень впечатлен рамкой. Хотя одна вещь, которая меня беспокоит, заключается в том, что во всех презентациях Spark они рассказывают о том, как Spark кэширует RDD, и поэтому несколько операций, которые нуждаются в одних и тех же данных, быстрее, чем другие подходы, такие как уменьшение карты.

Итак, у меня был вопрос: если это так, то просто добавьте механизм кэширования внутри фреймворков MR, таких как Yarn/Hadoop.

Зачем вообще создавать новую структуру?

Я уверен, что здесь что-то не хватает, и вы сможете указать мне на какую-то документацию, которая обучает меня больше искры.

Ответы

Ответ 1

Кэширование + в вычислении памяти определенно является большой проблемой для искры, но есть и другие вещи.


RDD (Resilient Distributed Data set): RDD является основной абстракцией искры. Это позволяет восстановить неудавшиеся узлы путем повторного вычисления DAG, а также поддерживает более похожий стиль восстановления Hadoop посредством контрольной точки, чтобы уменьшить зависимости RDD. Хранение искрового задания в DAG допускает ленивое вычисление RDD и может также позволить механизму оптимизации искры планировать поток способами, которые имеют большое значение в производительности.


API Spark: Hadoop MapReduce имеет очень строгий API, который не допускает такой универсальности. Поскольку искра абстрагирует многие детали низкого уровня, она позволяет повысить производительность. Также такие вещи, как широковещательные переменные и аккумуляторы, гораздо более универсальны, чем DistributedCache и счетчики IMO.


Spark Streaming: искрообразование основано на бумаге Discretized Streams, в которой предлагается новая модель для выполнения оконных вычислений на потоках с использованием микропакетов. Hadoop не поддерживает ничего подобного.


Как результат вычисления памяти в искровом разряде действует как собственный планировщик потока. В то время как для стандартного MR вам нужен внешний планировщик заданий, например Azkaban или Oozie, для планирования сложных потоков.


Проект hadoop состоит из MapReduce, YARN, общего пользования и HDFS; искра, однако, пытается создать единую платформу больших данных с библиотеками (в том же репо) для машинного обучения, обработки графов, потоковой передачи, нескольких библиотек типов sql, и я считаю, что глубокая библиотека обучения находится на начальных этапах. Хотя ничто из этого не является строго особенностью искры, это продукт искровой вычислительной модели. Tachyon и BlinkDB - это две другие технологии, которые построены вокруг искры.

Ответ 2

Значит, это гораздо больше, чем просто кеширование. Ааронман много страдал, только добавляя то, что он пропустил.

Исходная производительность без кэширования в 2-10 раз быстрее благодаря обычно более эффективной и хорошо структурированной структуре. Например. 1 jvm per node с потоками akka лучше, чем разветвление целого процесса для каждой задачи.

Scala API. Scala означает Масштабируемый язык и, безусловно, лучший язык для параллельной обработки. Говорят, что Scala сокращает код на 2-5x, но по моему опыту с кодом рефакторинга на других языках, особенно с кодом java mapreduce, его больше похоже на код на 10-100x меньше. Серьезно я переработал 100 LOC из java в горстку Scala/Spark. Его также гораздо легче читать и рассуждать. Spark еще более лаконичен и прост в использовании, чем инструменты абстракции Hadoop, такие как свинька и улей, и даже лучше, чем Scalding.

Spark имеет repl/shell. Необходимость цикла компиляции-развертывания для выполнения простых заданий устраняется. Можно интерактивно играть с данными так же, как использовать Bash для вызова системы.

Последнее, что приходит на ум, - это простота интеграции с большими табличными БД, такими как cassandra и hbase. В cass прочитать таблицу, чтобы сделать некоторый анализ, просто

sc.cassandraTable[MyType](tableName).select(myCols).where(someCQL)

Подобные вещи ожидаются для HBase. Теперь попробуйте сделать это в любой другой структуре MPP!

ОБНОВЛЕНИЕ, указывающее на то, что это только преимущества Spark, на самом деле есть немало полезных вещей. Например. GraphX ​​для обработки графов, MLLib для легкого машинного обучения, Spark SQL для BI, BlinkDB для безумных быстрых apprx-запросов и, как упоминалось, Spark Streaming

Ответ 3

много было покрыто ааронманом и самбетом. У меня есть еще несколько баллов.

  • Spark имеет намного меньшее значение для каждого задания и накладных расходов на одну задачу. Это дает возможность применения к случаям, когда Hadoop MR неприменим. Это случаи, когда ответ требуется через 1-30 секунд.
    Низкие затраты на одну задачу делают Spark более эффективным даже для больших рабочих мест с множеством коротких задач. Как очень приблизительная оценка - когда задача занимает 1 секунду, Spark будет в 2 раза эффективнее, чем Hadoop MR.

  • Искра имеет более низкую абстракцию, тогда MR - это график вычислений. В результате можно реализовать более эффективную обработку, а затем MR - особенно в тех случаях, когда сортировка не нужна. Другими словами - в MR мы всегда платим за сортировку, но в Spark - нам не нужно.

Ответ 4

  • Apache Spark обрабатывает данные в памяти, а Hadoop MapReduce сохраняется на диске после карты или уменьшает действие. Но Spark нуждается в большой памяти

  • Spark загружает процесс в память и сохраняет его там до дальнейшего уведомления ради кэширования.

  • Resilient Distributed Dataset (RDD), который позволяет вам прозрачно хранить данные в памяти и сохранять их на диске, если это необходимо.

  • Так как Spark использует встроенную память, нет препятствия синхронизации, которые замедляют вас. Это основная причина производительности Spark.

  • Вместо того, чтобы обрабатывать пакет сохраненных данных, как в случае с MapReduce, Spark также может управлять данными в реальном времени с помощью Spark Streaming.

  • API DataFrames был вдохновлен кадрами данных в R и Python (Pandas), но разработан с нуля до расширения существующего RDD API.

  • A DataFrame - это распределенная коллекция данных, организованная в именованные столбцы, но с более богатыми оптимизациями под капотом, поддерживающим скорость искры. p >

  • Использование RDD s Spark упрощает сложные операции, такие как join и groupBy, а в бэкэнд вы работаете с фрагментированными данными. Эта фрагментация позволяет выполнять Spark параллельно.

  • Spark позволяет создавать сложные многоступенчатые конвейеры данных с использованием направленного ациклического графика (DAG). Он поддерживает совместное использование данных в DAG, чтобы разные задания могли работать с одними и теми же данными. DAG - большая часть скорости Spark.

  • База данных Spark намного меньше. введите описание изображения здесь

Надеюсь, что это поможет.

Ответ 5

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

Основные две причины связаны с тем, что обычно не выполняется одно задание 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: каждая запись сериализуется и записывается на диск на стороне карты, а затем извлекается и десериализуется со стороны уменьшения.