我正在开发Spark(伯克利)集群计算系统。在我的研究中,我了解了其他一些内存系统,如Redis,Memcachedb等。如果有人能给我SPARK和REDIS(以及MEMCACHEDB)之间的比较,那将会很棒。 Spark在什么情况下比其他内存系统有优势?
答案 0 :(得分:30)
他们是完全不同的野兽。
Redis和memcachedb是分布式商店。 Redis是一个纯内存系统,具有可选的持久性,具有各种数据结构。 Memcachedb在Berkeley-DB之上提供了一个memcached API。在这两种情况下,它们更有可能被OLTP应用程序使用,或最终用于简单的实时分析(数据的即时聚合)。
Redis和memcachedb都缺乏有效地并行处理存储数据的机制。您无法轻松扫描并对存储的数据应用某些处理。它们不是为此而设计的。此外,除了使用客户端手动分片之外,它们无法在群集中扩展(虽然Redis群集实现正在进行中)。
Spark是一个通过提供内存分布式数据集来加速大规模分析工作(尤其是迭代工作)的系统。使用Spark,您可以在一组计算机上实现高效的迭代映射/减少作业。
Redis和Spark都依赖于内存数据管理。但是Redis(和memcached)和其他OLTP NoSQL商店在同一个球场上玩,而Spark与Hadoop地图/减少系统非常相似。
Redis擅长以高达1毫秒的延迟运行大量快速存储/检索操作。 Spark在为大量数据进行机器学习,图形分析,交互式数据挖掘等实施大规模迭代算法时非常出色。
更新:有关Storm的其他问题
问题是将Spark与Storm进行比较(见下面的评论)。
Spark仍然基于这样的想法:当现有数据量巨大时,将流程移动到数据更便宜,而不是将数据移动到流程。每个节点存储(或缓存)其数据集,并将作业提交给节点。因此,流程将移至数据。它与Hadoop map / reduce非常相似,只是内存存储被积极地用于避免I / O,这使得它对迭代算法有效(当前一步的输出是下一步的输入时)。 Shark只是一个构建在Spark之上的查询引擎(支持临时分析查询)。
你可以看到Storm是Spark的完整体系结构。 Storm是一种分布式流媒体引擎。每个节点实现一个基本过程,数据项流入/流出互连节点的网络(与Spark相反)。有了Storm,数据就会转移到这个过程中。
这两个框架都用于并行化大量数据的计算。
然而,Storm擅长动态处理大量生成/收集的小数据项(例如在Twitter流上实时计算某些聚合函数或分析)。
Spark适用于已导入Spark群集的现有数据(如Hadoop)的语料库,由于内存管理而提供快速扫描功能,并最大限度地减少迭代算法的全局I / O数量。