Сравните системы кластерных вычислений в оперативной памяти

Я работаю над системой кластерных вычислений Spark (Berkeley). В ходе моего исследования я узнал о некоторых других системах в памяти, таких как Redis, Memcachedb и т. д. Было бы здорово, если бы кто-нибудь мог дать мне сравнение между SPARK и REDIS (и MEMCACHEDB). В каких сценариях Spark имеет преимущество перед другими системами с оперативной памятью?


person void    schedule 22.05.2013    source источник


Ответы (1)


Это совершенно разные звери.

Redis и memcachedb — это распределенные хранилища. Redis — это чистая система в памяти с опциональной сохраняемостью с различными структурами данных. Memcachedb предоставляет memcached API поверх Berkeley-DB. В обоих случаях они, скорее всего, будут использоваться приложениями OLTP или, в конечном счете, для простой аналитики в реальном времени (объединение данных на лету).

И в Redis, и в memcachedb отсутствуют механизмы для эффективной параллельной обработки сохраненных данных. Вы не можете легко сканировать и обрабатывать сохраненные данные. Они не предназначены для этого. Кроме того, за исключением использования ручного сегментирования на стороне клиента, их нельзя масштабировать в кластере (хотя реализация кластера Redis продолжается).

Spark — это система для ускорения крупномасштабных аналитических задач (особенно итеративных) за счет предоставления распределенных наборов данных в памяти. С помощью Spark вы можете реализовать эффективные итеративные задания сопоставления/уменьшения на кластере машин.

Redis и Spark полагаются на управление данными в памяти. Но Redis (и memcached) играют на том же уровне, что и другие хранилища OLTP NoSQL, в то время как Spark скорее похож на систему сопоставления/уменьшения Hadoop.

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

Обновление: дополнительный вопрос о Storm

Вопрос в том, чтобы сравнить Spark со Storm (см. комментарии ниже).

Spark по-прежнему основан на идее, что при огромном существующем объеме данных дешевле перенести процесс в данные, чем перемещать данные в процесс. Каждый узел хранит (или кэширует) свой набор данных, и задания отправляются узлам. Итак, процесс переходит к данным. Он очень похож на карту/уменьшение Hadoop, за исключением того, что память агрессивно используется, чтобы избежать операций ввода-вывода, что делает его эффективным для итерационных алгоритмов (когда результат предыдущего шага является вводом следующего шага). Shark — это всего лишь механизм запросов, построенный поверх Spark (поддерживающий специальные аналитические запросы).

Вы можете видеть Storm как полную архитектурную противоположность Spark. Storm — это распределенный потоковый движок. Каждый узел реализует базовый процесс, а элементы данных передаются в/из сети взаимосвязанных узлов (в отличие от Spark). В Storm данные перемещаются в процесс.

Обе платформы используются для распараллеливания вычислений большого количества данных.

Тем не менее, Storm хорошо справляется с динамической обработкой многочисленных сгенерированных/собранных небольших элементов данных (например, вычисление некоторой функции агрегирования или аналитики в режиме реального времени в потоке Twitter).

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

person Didier Spezia    schedule 22.05.2013
comment
А как же Шторм? Как вы можете сравнивать его со Spark (или Shark)? - person void; 22.05.2013
comment
Спасибо за новость. Если не возражаете, есть еще один вопрос. В Spark есть инструмент «Spark Streaming» для анализа в реальном времени. Сопоставимо ли это со Storm (еще одним инструментом анализа в реальном времени)? Есть ли какие-то преимущества для него? - person void; 22.05.2013
comment
Модуль Spark Streaming сравним со Storm (оба являются потоковыми движками). Хотя работают они по-разному. Spark Streaming накапливает пакеты данных, а затем отправляет эти пакеты в механизм Spark, как если бы они были неизменяемыми наборами данных Spark. Storm обрабатывает и отправляет элементы сразу после их получения. Я не знаю, какой из них является наиболее эффективным с точки зрения пропускной способности. С точки зрения задержки, это, вероятно, Storm. - person Didier Spezia; 22.05.2013
comment
Есть ли какая-нибудь компания, использующая потоковую передачу Spark в производстве? Выпущена ли стабильная версия? - person void; 07.06.2013
comment
Я не думаю, что есть релиз производственного уровня. - person Didier Spezia; 10.06.2013
comment
Я хочу смоделировать данные в реальном времени и обработать их с помощью потоковой передачи Spark (например, подсчет слов) и получить результат в виде графика в реальном времени. График можно построить с помощью HTML, желательно PHP. Можете ли вы указать мне, как это сделать? Я могу вводить данные через сервер netcat и получать выходные данные через потоковую передачу искры. Теперь задача состоит в том, чтобы смоделировать данные в реальном времени, а затем построить график операции. - person void; 17.06.2013
comment
Stack Overflow предназначен для ответов на конкретные вопросы программирования. Вам будет лучше, если вы отправите сообщение в список рассылки spark-users (что вы уже сделали). - person Didier Spezia; 17.06.2013
comment
Вот мои 2 цента: потоковая передача Spark имеет концепцию скользящего окна, в то время как в Storm вы должны поддерживать окно самостоятельно. - person freevictor; 14.02.2014
comment
Пакетная обработка в Storm выполняется с помощью Trident. Поэтому сравнение Trident со Spark Streaming было бы более уместным. - person Martin Tapp; 26.03.2014