Подтвердить что ты не робот

Apache Spark vs Akka

Не могли бы вы рассказать мне разницу между Apache Spark и AKKA, я знаю, что обе структуры предназначены для программирования распределенных и параллельных вычислений, но я не вижу ссылки или разницы между ними.

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

4b9b3361

Ответ 1

Apache Spark фактически построен на Akka.

Akka - это среда общего назначения для создания реактивных, распределенных, параллельных и устойчивых параллельных приложений в Scala или Java. Akka использует модель Actor, чтобы скрыть весь связанный с потоком код и дает вам очень простые и полезные интерфейсы для быстрой реализации масштабируемой и отказоустойчивой системы. Хорошим примером для Akka является приложение в режиме реального времени, которое потребляет и обрабатывает данные, поступающие с мобильных телефонов, и отправляет их на какое-то хранение.

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

Apache Spark Streaming может выполнять аналогичные действия и функции на небольших партиях данных в режиме реального времени так же, как если бы они были сохранены.

ОБНОВЛЕНИЕ АПРЕЛЬ 2016

Из Apache Spark 1.6.0 Apache Spark больше не полагается на Akka для связи между узлами. Спасибо @EugeneMi за комментарий.

Ответ 2

Spark для обработки данных - это то же самое, что Akka для управления потоком данных и инструкций в приложении.

TL; DR

Spark и Akka - это две разные среды с разными вариантами использования и вариантами использования.

При создании приложений, распределенных или иных, может потребоваться планирование и управление задачами с помощью параллельного подхода, например с использованием потоков. Представьте себе огромное приложение с множеством потоков. Насколько это будет сложно?

TypeSafe (теперь он называется Lightbend). Инструментарий Akka позволяет вам использовать системы Actor (изначально производные от Erlang), которые дают вам слой абстракции над потоками. Эти актеры могут общаться друг с другом, передавая что-либо и все в виде сообщений, и делают вещи параллельно, не блокируя другой код.

Akka дает вам вишню на вершине, предоставляя вам способы запуска актеров в распределенной среде.

Apache Spark, с другой стороны, является средой обработки данных для массивных наборов данных, которые не могут быть обработаны вручную. Spark использует то, что мы называем RDD (или Resilient Distributed Datasets), который является распределенным списком наподобие уровня абстракции над вашими традиционными структурами данных, так что операции могут выполняться на разных узлах параллельно друг другу.

Spark использует инструментарий Akka для планирования заданий между различными узлами.

Ответ 3

Apache Spark:

Apache Spark ™ - быстрый и общий механизм для крупномасштабной обработки данных.

Программы Spark запускаются до 100 раз быстрее, чем Hadoop MapReduce в памяти, или на 10 раз быстрее на диске.

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

  • Интеграция с экосистемой Hadoop и источниками данных ( HDFS, Amazon S3, Hive, HBase, Cassandra и т.д.)

  • Может работать на кластерах, управляемых Hadoop YARN или Apache Mesos, а также может работать в режиме Автономный

  • Предоставляет API в Scala, Java и Python, поддерживая другие языки (например, R) на пути

  • В дополнение к операциям Map и Reduce он поддерживает запросы SQL, потоковые данные, машинное обучение и обработку графических данных.

Мы должны рассмотреть Spark как альтернативу Hadoop MapReduce, а не замену Hadoop.

Посмотрите infoQ и toptal для лучшего понимания.

Основные варианты использования Spark:

  • Алгоритмы машинного обучения
  • Интерактивная аналитика
  • Потоковые данные

Akka: из Letitcrash

Akka - это среда промежуточного программного обеспечения, основанная на событиях, для создания высокопроизводительных и надежных распределенных приложений на Java и Scala. Akka отделяет бизнес-логику от механизмов низкого уровня, таких как потоки, блокировки и неблокирующий IO. С помощью Akka вы можете легко настроить, как создаются, уничтожаются, планируются и перезапускаются актеры после сбоя.

Посмотрите на эту статью typesafe, чтобы лучше понять структуру Actor.

Akka обеспечивает отказоустойчивость на основе иерархии супервизора. Каждый Актер может создавать других Актеров, которые он затем будет контролировать, принимать решения, если их нужно возобновить, перезапустить, выйти на пенсию или если проблема должна быть увеличена.

Посмотрите Akka и вопросы SO

Основные варианты использования:

  • Обработка транзакций
  • Concurrency/parallelism
  • Моделирование
  • Пакетная обработка
  • Игра и ставки
  • Сложная обработка потока событий