Я работаю над вычислительной системой кластеров Spark (Berkeley). В своих исследованиях я узнал о некоторых других системах с памятью, таких как Redis, Memcachedb и т.д. Было бы здорово, если бы кто-то дал мне сравнение между SPARK и REDIS (и MEMCACHEDB). В каких сценариях Spark имеет преимущество перед этими другими системами памяти?
Сравните в кластерных вычислительных системах
Ответ 1
Это совершенно разные звери.
Redis и memcachedb - распределенные хранилища. Redis - это чистая система с памятью с дополнительной устойчивостью с различными структурами данных. Memcachedb предоставляет API memcached поверх Berkeley-DB. В обоих случаях они, скорее всего, будут использоваться приложениями OLTP или, в конечном счете, для простой аналитики в реальном времени ( "агрегирование данных на лету" ).
В Redis и memcachedb отсутствуют механизмы для эффективной итерации хранимых данных параллельно. Вы не можете легко отсканировать и применить некоторую обработку к сохраненным данным. Они не предназначены для этого. Кроме того, за исключением использования ручного сканирования на стороне клиента, их нельзя масштабировать в кластере (хотя реализация кластера Redis продолжается).
Spark - это система, которая ускоряет задания крупномасштабной аналитики (и особенно итеративные) путем предоставления распределенных наборов данных в памяти. С помощью Spark вы можете реализовать эффективные итеративные задания для создания карт/сокращений на кластере машин.
Redis и Spark полагаются на управление данными в памяти. Но Redis (и memcached) играют на том же самом шаге, что и другие OLTP файлы NoSQL, в то время как Spark похож на систему Hadoop map/reduce.
Redis хорошо работает с многочисленными операциями быстрого хранения/поиска с высокой пропускной способностью с задержкой в миллисекундах. Spark сияет при реализации масштабных итерационных алгоритмов машинного обучения, анализа графов, интеллектуального интеллектуального анализа данных и т.д.... при значительном объеме данных.
Обновление: дополнительный вопрос о Storm
Вопрос заключается в сравнении Spark с Storm (см. комментарии ниже).
Spark по-прежнему основывается на идее, что, когда существующий объем данных огромен, дешевле переместить процесс в данные, а не перемещать данные в процесс. Каждый node хранит (или кэширует) его набор данных, а задания отправляются на узлы. Таким образом, процесс переходит к данным. Он очень похож на карту/сокращение Hadoop, за исключением того, что память используется для предотвращения ввода-вывода, что делает ее эффективной для итеративных алгоритмов (когда выход предыдущего шага является входом следующего шага). Shark - это только механизм запросов, созданный поверх Spark (поддерживающий специальные аналитические запросы).
Вы можете увидеть Storm как полную архитектурную противоположность Spark. Storm - это распределенный потоковый движок. Каждый node реализует базовый процесс, а элементы данных перемещаются в/из сети взаимосвязанных узлов (в отличие от Spark). С помощью Storm данные перемещаются в процесс.
Обе структуры используются для параллелизации вычислений большого количества данных.
Тем не менее, Storm умеет динамически обрабатывать многочисленные сгенерированные/собранные небольшие элементы данных (например, вычисление некоторой функции агрегации или аналитики в реальном времени в потоке Twitter).
Spark применяется к корпусу существующих данных (например, Hadoop), который был импортирован в Spark-кластер, обеспечивает быстрые возможности сканирования из-за управления в памяти и минимизирует глобальное число операций ввода-вывода для итеративных алгоритмов.