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