目前我正在研究Apache spark和Apache点燃框架。
本文描述了它们之间的一些主要差异ignite vs spark但我意识到我仍然不了解它们的目的。
我的意思是哪个问题比点燃更可取,反之亦然?
答案 0 :(得分:34)
我认为Spark是交互式分析的好产品,而Ignite更适合实时分析和高性能事务处理。 Ignite通过提供高效且可扩展的内存中键值存储以及索引,查询数据和运行计算的丰富功能来实现这一目标。
Ignite的另一个常见用途是分布式缓存,它通常用于提高与关系数据库或任何其他数据源交互的应用程序的性能。
答案 1 :(得分:16)
Apache Ignite是一个高性能,集成和分布式的内存中平台,用于实时计算和处理大规模数据集.Ignite是一个与数据源无关的平台,可以跨多个数据源分发和缓存数据RAM中的服务器可提供前所未有的处理速度和大规模应用程序可扩展性。
Apache Spark(集群计算框架)是一种快速的内存数据处理引擎,具有富有表现力的开发API,允许数据工作者有效地执行需要快速迭代访问数据集的流,机器学习或SQL工作负载。 通过允许用户程序将数据加载到集群的内存中并重复查询,Spark非常适合高性能计算和机器学习算法。
一些概念差异:
Spark不存储数据,它从其他存储(通常是基于磁盘的)加载数据以进行处理,然后在处理完成时丢弃数据。另一方面,Ignite提供具有ACID事务和SQL查询功能的分布式内存中键值存储(分布式缓存或数据网格)。
Spark用于非事务性的只读数据(RDD不支持就地突变),而Ignite支持非事务性(OLAP)有效负载以及完全符合ACID的事务(OLTP)
Ignite完全支持可以“无数据”的纯计算有效载荷(HPC / MPP)。 Spark基于RDD,仅适用于数据驱动的有效负载。
<强>结论:强>
Ignite和Spark都是内存计算解决方案,但它们针对不同的用例。
在许多情况下,它们一起使用可以获得更好的效果:
Ignite可以提供共享存储,因此状态可以从一个Spark应用程序或作业传递到另一个。
Ignite可以为SQL提供索引,因此Spark SQL可以加速超过1,000x(spark不会将数据编入索引)
使用文件而不是RDD时,Apache Ignite内存文件系统(IGFS)也可以在Spark作业和应用程序之间共享状态
答案 2 :(得分:4)
是的,Spark和Ignite一起工作。
点燃与火花
Ignite是一个内存分布式数据库,更侧重于数据存储并处理数据的跨国更新,然后为客户请求提供服务。 Apache Spark是MPP计算引擎,它更倾向于分析,ML,Graph和ETL特定的有效负载。
Apache Spark是通用集群计算系统。这是一种优化的引擎,支持常规执行图。它还支持丰富的高级工具集,包括用于SQL和结构化数据处理的Spark SQL,用于机器学习的MLlib,用于图形处理的GraphX和Spark流。
Spark on YARN typology are discussed here。
Ignite是一个以内存为中心的分布式数据库,缓存,用于跨国,分析和流式处理工作负载,可提供PB级的内存速度。 Ignite还包括对群集管理和操作,可感知群集的消息传递和零部署技术的一流支持。 Ignite还为跨内存和可选数据源的完整ACID交易提供支持。
答案 3 :(得分:2)
尽管Apache Spark和Apache Ignite利用了内存计算的强大功能,但它们可以解决不同的用例。 Spark进程但不存储数据。它加载数据,处理它,然后丢弃它。另一方面,Ignite可用于处理数据,它还提供具有ACID兼容事务和SQL支持的分布式内存中键值存储。 Spark也适用于非事务性的只读数据,而Ignite支持非事务性和事务性工作负载。最后,Apache Ignite还支持HPC和MPP用例的纯计算有效负载,而Spark仅适用于数据驱动的有效负载。
Spark和Ignite可以很好地相互补充。 Ignite可以为Spark提供共享存储,因此状态可以从一个Spark应用程序或作业传递到另一个。 Ignite还可用于为分布式SQL提供索引,从而将Spark SQL加速最多1,000倍。
答案 4 :(得分:1)
Apache Spark 是一个处理框架。您告诉它从何处获取数据,提供一些有关如何处理该数据的代码,然后告诉它将结果放在何处。这是一种可在任何源上的数据上轻松可靠地在群集中的一堆节点上运行计算逻辑的一种方法(然后在处理过程中将其保存在内存中)。它主要用于对来自各种来源(甚至一次来自多个数据库)或流媒体来源(如Kafka)的数据进行大规模分析。它也可以用于ETL,例如在将最终结果放入其他数据库系统之前将数据转换和合并在一起。
Apache Ignite 更像是一个内存分布式数据库,至少这是它的启动方式。它具有键/值和SQL API,因此您可以以各种方式存储和读取数据,并像运行其他任何SQL数据库一样运行查询。它还支持运行您自己的代码(类似于Spark),因此您可以执行SQL真正无法使用的处理,同时还可以在同一系统中读取和写入数据。它还可以在中间充当缓存层的同时将数据读取/写入其他数据库系统。最终,从2018年起,它还支持磁盘存储,因此现在您可以将其用作多合一的分布式数据库,缓存和处理框架。
对于更复杂的分析,Apache Spark仍然更好,您可以让Spark从Apache Ignite读取数据,但是在许多情况下,现在可以使用Apache Ignite将处理和存储整合到单个系统中。
答案 5 :(得分:0)
我现在回答这个问题很晚,但是让我尝试分享我的看法。
Ignite可能尚未准备好用于企业应用程序的生产中,因为某些重要功能(如“安全性”仅在Gridgain中可用)(通过Ignite进行包装)
完整的功能列表可在下面的链接中找到
答案 6 :(得分:-2)
尽管Apache Spark和Apache Ignite都利用了内存计算的强大功能,但它们解决了一些不同的用例,很少“竞争”同一任务。一些概念上的差异:
Spark doesn’t store data, it loads data for processing from other storages, usually disk-based, and then discards the data when the processing is finished. Ignite, on the other hand, provides a distributed in-memory key-value store (distributed cache or data grid) with ACID transactions and SQL querying capabilities.
Spark is for non-transactional, read-only data (RDDs don’t support in-place mutation), while Ignite supports both non-transactional (OLAP) payloads as well as fully ACID compliant transactions (OLTP)
Ignite fully supports pure computational payloads (HPC/MPP) that can be “dataless”. Spark is based on RDDs and works only on data-driven payloads.