Apache Ignite vs Apache Spark

jopen 9年前

出于我前面的贴子大赞了 Apache Ignite 的基于内存的文件系统和缓存功能,我将总结一下我将总结一下 Ignite 和 Spark 的主要区别。我发现这样的问题被重复提出。这很容易回答,因此不必在网上“挖坟”。

显而易见的一个不同就是 Ignite 是一个存于内存的计算系统,也就是把内存做为主要的存储设备。Spark 则是在处理时使用内存。系统的索引更快,提取时间减少,避免了序列/反序列等优点,使前者这种内存优先的方法更快。

Ignite 的mapreduce 完全兼容 Hadoop MR API,因此大家可以简单的复用现有的MR代码,并让其以30倍的速度运行。 我准备发布的 Apache Bigtop in-memory stack的例子,将展示出这感人的加速。

另外,不同于Spark的 streaming,Ignite 并不受RDD 大小的限制。换句话说,你不需要在处理RDD前指定他的长度,你可以确实做到真正的流式处理。就是说,Ignite处理一个流式内容的时候是没有延迟的。

溢出是内存计算的通病:毕竟内存是有限的。在Spark中RDD是不可变长的,如果一个RDD创建的时候内存占用大于节点内存的1/2,那随后 transformation跟generation的RDD很有可能占满整个节点内存,然后导致溢出。除非新的RDD是在另一个节点产生的。Tachyon 也在努力试图解决这个问题。

Ignite 没有这种数据内存溢出的问题,因为他的缓存可以按照原子或事务的方式更新。无论如何,还是有可能溢出的:处理策略在这里有详细解释

-作为一个组件,Ignite也提供了first-class citizen的文件系统缓存层。注意,我已经定位过这个跟Ignite的不同,但是由于一些原因,我发的东西被他们删除了。我想知道为什么?;)

-Ignite 使用 off-heap 内存,来避免 GC 中断,灰常有效。

-Ignite 保证强一致性。

-Ignite 完全支持 SQL99 作为一个支持 ACID 事务的方式。

-Ignite 提供了内存SQL索引功能,可以避免全部数据扫描,直接导致非常显著的性能改进(参见第一段)

-用Ignite的Java开发者不需要学习Scala Ropes这些,而且还鼓励使用Groovy。为了文章的简洁与凝练,对于后者我保留我的专业意见。

我会在闲散很长一段时间,但你可以考虑阅读一下

  http://www.infoq.com/articles/gridgain-apache-ignite ,

  http://www.odbms.org/blog/2015/02/interview-nikita-ivanov/

  这个项目的作者之一Nikita Ivanov 对其它关键的区别有很好的反馈。另外, 另外如果你对这些内容感兴趣 - 考虑加入 Apache Ignite (孵化中) 开发组 然后开始贡献代码吧!