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