Apache Spark 与 Apache Ignite [关闭]

Posted

技术标签:

【中文标题】Apache Spark 与 Apache Ignite [关闭]【英文标题】:Apache Spark vs Apache Ignite [closed] 【发布时间】:2016-07-02 09:44:09 【问题描述】:

目前我正在研究 Apache spark 和 Apache ignite 框架。

在这篇文章ignite vs spark中描述了它们之间的一些原理差异,但我意识到我仍然不了解它们的目的。

我的意思是对于哪些问题引发比点燃更可取,反之亦然?

【问题讨论】:

Ignite Proposal 很好地概述了它与 Spark 和 Hadoop 的对比。 【参考方案1】:

我会说 Spark 是交互式分析的好产品,而 Ignite 更适合实时分析和高性能事务处理。 Ignite 通过提供高效且可扩展的内存键值存储以及丰富的索引、查询数据和运行计算功能来实现这一目标。

Ignite 的另一个常见用途是分布式缓存,它通常用于提高与关系数据库或任何其他数据源交互的应用程序的性能。

【讨论】:

感谢您的解释,但是交互式分析和实时分析有什么区别? 好吧,OLAP 和 OLTP 在这里可能是更正确的术语。前者意味着运行相对较少的、大型且主要是只读的查询,而后者则意味着较小查询的高吞吐量。 Ignite 最初是为 OLTP 设计的,但目前也针对 OLAP。【参考方案2】:

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 作业和应用程序之间共享状态

【讨论】:

Ignite 更适合构建在线事务处理 (OLTP) 解决方案,而不适合构建在线分析处理 (OLAP)。Spark 更适合分析,而 Ignite 更适合用于数据管理和查询。 【参考方案3】:

Spark 和 Ignite 可以一起工作吗?

是的,Spark 和 Ignite 可以协同工作。

总之

点燃与火花

Ignite 是一个内存分布式数据库,更专注于数据存储并处理数据的跨国更新,然后服务于客户请求。 Apache Spark 是一个 MPP 计算引擎,它更倾向于分析、ML、Graph 和 ETL 特定的负载。


详细说明

Apache Spark 是一个 OLAP 工具

Apache Spark 是一个通用的集群计算系统。它是一个支持通用执行图的优化引擎。它还支持一组丰富的高级工具,包括用于 SQL 和结构化数据处理的 Spark SQL、用于机器学习的 MLlib、用于图形处理的 GraphX 和 Spark Streaming。

Spark 与其他组件

部署拓扑

Spark on YARN typology is discussed here.


Apache Ignite 是一个 OLTP 工具

Ignite 是一个以内存为中心的分布式数据库、缓存和处理平台,适用于跨国、分析和流式工作负载,可提供 PB 级的内存速度。 Ignite 还包括对集群管理和操作、集群感知消息传递和零部署技术的一流支持。 Ignite 还为跨内存和可选数据源的完整 ACID 事务提供支持

SQL 概述

部署拓扑

【讨论】:

【参考方案4】:

Apache Spark 是一个处理框架。你告诉它从哪里获取数据,提供一些关于如何处理数据的代码,然后告诉它把结果放在哪里。这是一种轻松可靠地跨集群中的一堆节点运行来自任何源的数据的计算逻辑的方法(然后在处理过程中将其保存在内存中)。它主要用于对来自各种来源(甚至同时来自多个数据库)或来自 Kafka 等流式来源的数据进行大规模分析。它也可以用于 ETL,例如在将最终结果放入其他数据库系统之前将数据转换和连接在一起。

Apache Ignite 更像是一个内存分布式数据库,至少它是这样开始的。它具有键/值和 SQL API,因此您可以以各种方式存储和读取数据,并像运行任何其他 SQL 数据库一样运行查询。它还支持运行您自己的代码(类似于 Spark),因此您可以执行无法真正使用 SQL 的处理,同时还可以在同一系统中读取和写入数据。它还可以读取/写入数据到其他数据库系统,同时充当中间的缓存层。最终,截至 2018 年,它还支持磁盘存储,因此现在您可以将其用作一体化分布式数据库、缓存和处理框架。


Apache Spark 仍然更适合更复杂的分析,您可以让 Spark 从 Apache Ignite 读取数据,但对于许多场景,现在可以使用 Apache Ignite 将处理和存储整合到一个系统中。

【讨论】:

【参考方案5】:

尽管 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 倍。

尼基塔·伊万诺夫:http://www.odbms.org/blog/2017/06/on-apache-ignite-apache-spark-and-mysql-interview-with-nikita-ivanov/

【讨论】:

【参考方案6】:

尽管 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.

【讨论】:

【参考方案7】:

我回答这个问题迟了,但让我试着分享一下我对这个问题的看法。

Ignite 可能尚未准备好在企业应用程序的生产环境中使用,因为某些重要功能(例如安全性)仅在 Gridgain(Ignite 上的包装器)中可用

完整的功能列表可以从下面的链接中找到

https://www.gridgain.com/products/gridgain-vs-ignite

【讨论】:

以上是关于Apache Spark 与 Apache Ignite [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

spark与flume整合

apache storm apache spark哪个更火

Apache Spark 与 MapReduce

Apache Spark SQLContext 与 HiveContext 有啥区别?

Apache Spark:地图与地图分区?

Apache Spark 和 gRPC