目前我正在研究 Apache spark 和 Apache ignite 框架。
他们之间的一些原则差异在这篇文章中描述了点燃与火花但我意识到我仍然不明白他们的目的。
我的意思是对于哪些问题引发比点燃更可取,反之亦然?
目前我正在研究 Apache spark 和 Apache ignite 框架。
他们之间的一些原则差异在这篇文章中描述了点燃与火花但我意识到我仍然不明白他们的目的。
我的意思是对于哪些问题引发比点燃更可取,反之亦然?
我会说 Spark 是一个很好的交互式分析产品,而 Ignite 更适合实时分析和高性能事务处理。Ignite 通过提供高效且可扩展的内存键值存储以及丰富的索引、查询数据和运行计算功能来实现这一目标。
Ignite 的另一个常见用途是分布式缓存,它通常用于提高与关系数据库或任何其他数据源交互的应用程序的性能。
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,000 倍(spark 不索引数据)
当使用文件而不是 RDD 时,Apache Ignite 内存中文件系统 (IGFS) 还可以在 Spark 作业和应用程序之间共享状态
是的,Spark 和 Ignite 一起工作。
点燃与火花
Ignite 是一个内存分布式数据库,更专注于数据存储和处理数据的跨国更新,然后服务于客户请求。Apache Spark 是一个 MPP 计算引擎,它更倾向于分析、ML、Graph 和 ETL 特定的有效负载。
Apache Spark 是一个通用的集群计算系统。它是一个支持通用执行图的优化引擎。它还支持一组丰富的高级工具,包括用于 SQL 和结构化数据处理的 Spark SQL、用于机器学习的 MLlib、用于图形处理的 GraphX 和 Spark Streaming。
Ignite 是一个以内存为中心的分布式数据库、缓存和处理平台,适用于跨国、分析和流式工作负载,提供 PB 级的内存速度。Ignite 还包括对集群管理和操作、集群感知消息传递和零部署技术的一流支持。Ignite 还支持跨内存和可选数据源的完整 ACID 事务。
Apache Spark是一个处理框架。你告诉它从哪里获取数据,提供一些关于如何处理这些数据的代码,然后告诉它把结果放在哪里。这是一种轻松可靠地跨集群中的一堆节点运行来自任何源的数据的计算逻辑的方法(然后在处理过程中将其保存在内存中)。它主要用于对来自各种来源(甚至同时来自多个数据库)或来自 Kafka 等流式来源的数据进行大规模分析。它也可以用于 ETL,例如在将最终结果放入其他数据库系统之前将数据转换和连接在一起。
Apache Ignite更像是一个内存分布式数据库,至少它是这样开始的。它具有键/值和 SQL API,因此您可以以各种方式存储和读取数据,并像运行任何其他 SQL 数据库一样运行查询。它还支持运行您自己的代码(类似于 Spark),因此您可以进行无法真正使用 SQL 的处理,同时还可以在同一个系统中读取和写入数据。它还可以读取/写入数据到其他数据库系统,同时充当中间的缓存层。最终,截至 2018 年,它还支持磁盘存储,因此现在您可以将其用作一体化分布式数据库、缓存和处理框架。
Apache Spark 仍然更适合更复杂的分析,您可以让 Spark 从 Apache Ignite 读取数据,但对于许多场景,现在可以使用 Apache Ignite 将处理和存储整合到一个系统中。
尽管 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 倍。
尽管 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.
我迟到了回答这个问题,但让我尝试分享我对此的看法。
Ignite 可能还没有准备好在企业应用程序的生产中使用,因为一些重要的功能,例如安全性仅在 Gridgain 中可用(Ignite 的包装器)
完整的功能列表可以从下面的链接中找到