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