2023年7月21日发(作者:)
igniteredis_全⾯对⽐,深度解析Ignite与Spark经常有⼈拿 Ignite 和 Spark 进⾏⽐较,然后搞不清两者的区别和联系。Ignite 和 Spark,如果笼统归类,都可以归于内存计算平台,然⽽两者功能上虽然有交集,并且 Ignite 也会对 Spark 进⾏⽀持,但是不管是从定位上,还是从功能上来说,它们差别巨⼤,适⽤领域有显著的区别。本⽂从各个⽅⾯对此进⾏对⽐分析,供各位技术选型参考。⼀、综述Ignite 和 Spark 都为 Apache 的顶级开源项⽬,遵循 Apache 2.0 开源协议,经过多年的发展,⼆者都已经脱离了单⼀的技术组件或者框架的范畴,向着多元化的⽣态圈发展,并且发展速度都很快。IgniteIgnite 技术来源于 GridGain 公司的商业产品,于 2014 年将绝⼤部分功能捐赠给 Apache 社区,并于 2015 年 8 ⽉毕业成为 Apache的顶级项⽬。Ignite ⽬前⼀直保持着⾼强度的快速迭代式开发,基本⼀个季度发布⼀个⼤版本,从提交数量、版本发布数量等若⼲指标来评估,⼀直保持在 Apache 社区 300 多个开源项⽬的前五位。⽬前已经聚拢了来⾃多家组织或公司的众多开发者,处于⾮常活跃的状态,开发者社区和产品⽣态正在形成中。Spark作为 Hadoop ⽣态圈重要成员的 Spark 于 2009 年由 Matei Zaharia 在加州⼤学伯克利分校 AMPLab 开发,于 2013 年 6 ⽉捐赠给Apache 基⾦会并切换协议⾄ Apache2.0,2014 年 2 ⽉毕业成为 Apache 的顶级项⽬。鉴于 Spark 核⼼计算模型的先进性,它吸引了众多⼤企业和组织的积极参与,促成了 Spark 的⾼速发展和社区的空前繁荣,随着 Spark 技术不断地向纵深发展以及向外延伸,形成了庞⼤的 Spark 社区和⽣态圈,⽬前⼏乎成为了⼤数据领域影响⼒最⼤的开源项⽬。⼆、定位Ignite 和 Spark 都是分布式架构,都归类于⽬前的⼤数据技术类别,⼆者都是利⽤⼤量内存的⾼性能,为原有的技术⽅案进⾏提速,但是定位差别很⼤。IgniteIgnite 的核⼼定位是⼀个分布式的内存缓存解决⽅案内存缓存解决⽅案,通过将数据保存在内存中,提供⽐传统的基于磁盘的⽅案更快的性能。然后在分布式缓存的基础上,⼀⽅⾯进⼀步深⼊,通过标准 SQL 功能的引⼊,向分布式内存数据库的⽅向发展,⼀⽅⾯功能不断扩展,引⼊了内存计算、流数据处理、机器学习等功能。Ignite 部署灵活,可以轻易地集成进已有的系统,⾮常⽅便地与已有的数据库系统集成(NoSQL、HDFS 也⽀持),为已有的业务进⾏加速服务。不颠覆已有架构,是 Ignite 很重要的逻辑。SparkSpark 的核⼼定位是⼀个分布式统⼀⼤数据分析引擎分布式统⼀⼤数据分析引擎,通过先进的 RDD 模型和⼤量内存的使⽤,解决了使⽤ Hadoop 的 MapReduce进⾏多轮迭代式计算的性能问题。然后在 RDD 的基础上不断完善,引⼊了 Dataset 和 DataFrame、SparkSQL、Spark Streaming、SparkML 等更⾼级的功能。Spark 对 Hadoop 技术栈有⾮常好的⽀持,很多可以直接集成,虽然也可以⽀持 RDBMS 的读写,但是这不是 Spark 主要的关注⽅向。三、核⼼技术Ignite 和 Spark 核⼼技术截然不同。IgniteIgnite 的核⼼数据结构为分布式哈希,即键-值型存储,和 Redis 等可以归于同⼀类,对于分布式内存数据库,核⼼技术来源于 H2 数据库,也即 Ignite 对 SQL 的⽀持来源于 H2 的 SQL 引擎。Ignite 的核⼼计算模型为 MapReduce+⽀持 SQL 查询的缓存优化。Ignite 的内存数据模型为固化内存架构,同时⽀持内存存储和磁盘存储(可选)。数据保存在堆外,因此只要内存够⽤,不⽤担⼼内存溢出,也不⽤担⼼⼤量占⽤内存导致垃圾回收暂停。SparkSpark 的核⼼是建⽴在统⼀的抽象 RDD 之上,使得 Spark 的各个组件可以⽆缝进⾏集成,在同⼀个应⽤程序中完成⼤数据计算任务。RDD 的设计理念源⾃ AMP 实验室发表的论⽂《Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-MemoryCluster Computing》。RDD 可以认为是 MapReduce 的超集,也即 RDD 也可以实现传统的 MapReduce 计算机制。四、部署模型Ignite 和 Spark 的组⽹基本模式有很⼤的不同,但在更⾼层⾯的资源管理上,⽀持能⼒是差不多的。IgniteIgnite 集群基于⽆共享架构,所有的集群节点都是平等的、独⽴的,整个集群不存在单点故障。 通过灵活的 Discovery SPI 组件,Ignite节点可以⾃动地发现对⽅,因此只要需要,可以轻易地对集群进⾏缩放。Ignite 可以独⽴运⾏,可以组成集群,可以运⾏于 Kubernetes 和 Docker 容器中,也可以运⾏在 Apache Mesos 以及 Hadoop Yarn上,可以运⾏于虚拟机和云环境,也可以运⾏于物理机,从技术上来说,集群部署在哪⾥,是没有限制的。Ignite 还⽀持嵌⼊式部署,也就是和应⽤集成在⼀起。SparkSpark ⽀持四种分布式部署⽅式:分别是 Standalone、Spark on Mesos、Spark on YARN 和 Kubernetes。Spark 的部署属于 Master/Slave 模式,可能存在单点故障问题,但是可以通过 ZooKeeper 解决。五、功能内存计算Ignite 和 Spark 都有内存计算的能⼒,尤其内存计算是 Spark 的主打功能,从技术原理上来看它们的能⼒:SparkRDD > IgniteMapReduce+Cache > Hadoop MapReduce。但具体来说,Ignite 的计算模型优于 Hadoop ⽏庸置疑。但是 Ignite 和 Spark,虽然 Ignite 技术原理上不如 SparkRDD 先进,但是落实到具体的实践中,则要看具体的业务场景、技术⼈员对技术和设计的掌控⼒、代码优化程度等,⽆法直接下结论,这个要具体问题具体分析。Spark 擅长的多轮迭代式计算、交互式计算、图计算等,Ignite 则没有对应的解决⽅案。IgniteIgnite 的计算功能原理与 Hadoop ⼀致,都是 MapReduce 范式,即可以将⼀个批量任务拆分为多个部分,然后在不同的节点并⾏执⾏,这样就可以并⾏地利⽤所有节点的资源,来减少计算任务的整体执⾏时间。但是 Ignite 的计算有两个重要的独特之处,⼀个是鉴于 Ignite 灵活的部署模型,Ignite 可以是离线计算,也可以是在线计算,对于在线的场景,⽐如 OLTP 业务,它可以通过将请求中的计算负载同步地放在多个可⽤节点上,然后将结果返回,这样可以提⾼整个系统的扩展性和容错能⼒。 另⼀个是计算可以和数据并置,即计算会被发送到要处理的数据所在的节点,这样会使开销最⼩化。SparkSpark 的计算模型从原理上来说,作为 MapReduce 的超集是⾮常先进的,Spark 也具有 MapReduce 的机制和开发接⼝,所以⽤Spark 实现 MapReduce 计算模型是可以的。Spark 的核⼼概念 RDD,作为⼀个通⽤的数据抽象,着重解决了 MapReduce 模型在处理多轮迭代式算法(⽐如机器学习、图算法等)的性能瓶颈,避免了中间结果落盘导致的⼤量数据复制、磁盘 IO 和序列化开销。但是 Spark 的计算功能是按照离线系统设计的,⽆法实现Ignite 的在线计算功能。存储⽀持能⼒Ignite 和 Spark 都可以将第三⽅存储作为数据来源⽤作后续的处理,两者对第三⽅存储的⽀持程度、侧重点完全不同。这⾥说的第三⽅存储,暂时划分为传统的 RDBMS 和 NoSQL(HDFS、Hive、Cassandra 等)。但是 Ignite 在⽀持第三⽅存储的同时,本⾝还具有原⽣持久化的能⼒。IgniteRDBMS:Ignite 作为⼀个缓存系统,天然对 RDBMS 有良好的⽀持,基本上只要⽀持 JDBC/ODBC 协议的数据库都没有问题。对于数据的加载、数据的读写及其⼀致性(事务)保证、各种⼯具的⽀持、各种通信协议的⽀持都⼀应俱全,是⼀个完整的⽅案;NoSQL:Ignite 对于各种 NoSQL 数据库的⽀持是有限的,因为功能定位的原因,不是任何 NoSQL 产品都适合和 Ignite 整合进⽽提升能⼒,就⽬前来说,Ignite 在不同的功能场景对 NoSQL 提供了⽀持,包括对 HDFS 的⽀持,也包括与 Cassandra 的原⽣集成;原⽣持久化:Ignite 基于固化内存架构,提供了原⽣持久化,可以同时处理存储于内存和磁盘上的数据和索引,它将内存计算的性能和扩展性与磁盘持久化和强⼀致性整合到⼀个系统中。 原⽣持久化以有限的性能损失,透明地提供了更强⼤的功能,即使整个集群重启,内存不需要预热,数据可以直接访问。SparkRDBMS:SparkRDD 可以将 RDBMS 作为数据来源之⼀,⽀持 RDBMS 数据的批量读写,也⽀持各种类型的 RDBMS,但是Spark 对 RDBMS 的读写,属于批量模式,Spark 更多地会将 RDBMS 作为分析型业务的数据来源之⼀,最后如有必要,则将业务分析的结果批量回写 RDBMS;NoSQL:Spark 原⽣⽀持 JDBC、JSON、Parquet、csv、libsvm 以及 orcFile 等,也可以通过扩展接⼝⾃定义数据源。Spark 可以直接或者通过各种连接器读取 Hive、Hbase、Cassandra 中的数据,然后创建对应的 RDD,写⼊也是同理,这个能⼒是 Ignite 所不具备的;原⽣持久化:Spark 不具备原⽣的持久化能⼒。SQLIgnite 和 Spark 都⽀持 SQL,但是两者的定位和能⼒,有所不同。IgniteIgnite SQL ⽬前的语法兼容于 ANSI-99,⽀持查询、删除、更新与插⼊,但语法和功能与标准并不完全⼀致。Ignite 如果做好了数据并置,SQL 查询的性能是很好的,同时 Ignite 还⽀持索引,这都进⼀步提升了 Ignite SQL 的能⼒。另外,Ignite SQL 对缓存的功能进⾏了极⼤的增强,通常⽤于缓存的在线查询和计算,⽤于离线数据处理也是可以的。SparkSparkSQL 最初来源于 Shark 项⽬,后来两者进⾏了合并,SparkSQL 构建于 Dataset/DataFrame 机制基础上,⽬前只⽀持查询,主要适⽤于分析型业务以及对来⾃不同数据源的结构化数据进⾏处理。它也可以进⾏交互式查询,因为不⽀持索引等等原因,所以性能较差,响应时间可能较长。数据⼀致性(事务)IgniteIgnite 整体来说对事务的⽀持还不完善,具体来说,在键-值 API 层⾯,有完善的事务机制,主要原理来⾃于经过优化的⼆阶段提交协议,但是 SQL 层⾯的 DML 语句还不⽀持事务,未来版本会解决该问题。在计算层⾯,因为⽀持丰富的编程接⼝,也可以⾮常容易地与各种开源的 ORM 框架集成,所以也可以⽅便地对事务进⾏细粒度的控制,⽐如 CRUD 都是没问题的。SparkSparkSQL 本⾝并不提供事务机制。Spark 本⾝也不适⽤于 RDBMS 的细粒度数据维护,RDBMS 对于 Spark 来说,只是数据的⼀个来源和存储地之⼀,通常都是批量操作,如果批量操作失败,Spark 有容错机制可以重来,以保证整体的⼀致性。流计算Spark 有 Spark Streaming,Ignite 也⽀持流数据处理。IgniteIgnite 可以与主流的流处理技术和框架进⾏集成,⽐如 Kafka、Camel、Storm 与 JMS,提供可扩展和容错的能⼒。流处理技术为 Ignite提供了⼀种数据加载机制,针对流式数据,Ignite 也提供了各种处理和查询功能。Ignite 社区官⽅提供了 10 种流处理技术的集成实现,利⽤统⼀的 API,开发者也可以⾃⾏开发流处理技术实现。Ignite 为所有流⼊ Ignite 的数据以可扩展和容错的⽅式提供⾄少⼀次保证。SparkSpark Streaming 是基于 Spark 的流式批处理引擎,其基本原理是把输⼊数据以某⼀时间间隔批量的处理,即以时间为单位切分数据流,每个切⽚内的数据对应⼀个 RDD,进⽽可以采⽤ Spark 引擎进⾏快速计算。其同样⽀持众多的数据源,内部的数据表⽰形式为DStream。Spark Streaming 吞吐量⾼,可以做复杂的业务逻辑,但是秒级别的延迟是否符合业务需求需要确认。Spark Streaming 可以与 Spark 其他技术完美集成,包括 SparkML、SparkSQL 等。机器学习Ignite 和 Spark 都⽀持机器学习。IgniteIgnite 从 2.5 版本开始,提供了完整的机器学习解决⽅案,Ignite 的机器学习有两个优点:⼀个是如果已经在 Ignite 中持有了⼤量的数据,那么继续在 Ignite 中进⾏机器学习的训练和推理,就不需要在不同系统间进⾏ ETL 的等待,提⾼效率。另⼀个是 Ignite 提供了⼀系列的机器学习和深度学习算法,对 Ignite 的分布式并置处理进⾏优化,这样在处理⼤规模的数据集或者不断增长的输⼊数据流时,提供了内存级的速度和近乎⽆限的扩展性,⽽不需要将数据移到另外的存储。⽬前⽀持的算法包括回归、分类、聚类以及对数据进⾏预处理等。另外Ignite 还⽀持了⼀组遗传算法,该算法适合于以最优的⽅式检索⼤量复杂的数据集。SparkSpark 很早就包含了机器学习库,RDD 模型⾯向的⼀个主要场景就是机器学习这样的多轮迭代式计算。⽬前的 Spark 机器学习库有 2 个实现,正在逐步向 SparkML 过渡,SparkML 基于 DataFrame API,更强⼤更灵活,⽽传统的 MLlib 会处于维护状态。SparkML 基于DataFrames 对 API 进⾏了统⼀,使⽤体验更友好。可以使⽤ SparkSQL 等更⾼级的功能,⽀持流⽔线,特别是特征变换。Spark 的机器学习因为 RDD 的原因性能更好,⽀持的算法也更多。图计算Ignite暂不⽀持SparkSpark 中包含了 GraphX,这是⼀个图计算组件。它在 RDD 基础上引⼊了新的 Graph 抽象,为了⽀持图形计算,GraphX 公开了⼀组基本运算符(例如⼦图、连接顶点和聚合消息)以及 Pregel API 的优化变型。此外,GraphX 还包括了越来越多的图形算法和构造者,以简化图形分析任务。开发语⾔和客户端协议IgniteIgnite 是以 Java 语⾔为主进⾏开发的,因此可以在 JVM ⽀持的任何操作系统和架构上部署和运⾏。Java 的 API ⽀持 Ignite 的所有功能,使⽤ Java 或者 Scala 开发的应⽤,相关的逻辑可以直接嵌⼊ Ignite,然后借助于 SQL 以及键-值操作与集群进⾏交互,执⾏分布式计算和机器学习算法等等。Ignite 还⽀持使⽤标准的 JDBC 或者 ODBC 连接,可以像其它 SQL 存储⼀样与 Ignite 进⾏交互。Ignite 还为 Java、.NET 和 C++ 开发者提供原⽣的 SQL API,性能更好。Ignite 还⽀持其它的语⾔访问,⽐如 Python、Ruby、PHP 与 NodeJS,另外还可以考虑使⽤ Ignite 的⼆进制客户端协议接⼊集群。SparkSpark 使⽤ Scala 语⾔开发,⽬前⽀持使⽤ Scala、Java、Python、R 语⾔开发 Spark 程序。监控运维⼯具⽀持IgniteIgnite 开源版没有提供图形化的监控⼯具,但是提供了简易的命令⾏⼯具,同时为了简化开发,Ignite 提供了图形化的 Web 控制台。Ignite 运⾏时可以通过 API 接⼝获取⼤量的指标,通过编程的⽅式了解集群的状况。如果需要强⼤的监控运维⼯具,可以购买 GridGain 的商业版软件和服务。如果搭建的是⼀个⼩规模的集群,鉴于 Ignite 的⽆共享架构,部署运维都是⽐较简单的。SparkSpark 启动后会有⼀个 Web 控制台,虽然不是很美观,但是可以从总体上看到 Spark 的当前运⾏状态。Spark 属于 Master/Slave 模式,如果直接拿开源版本搭建⼤规模集群,部署运维还是⾮常⿇烦的,但是国内有很多⼚商开发包含 Spark组件的⼤数据平台,为部署和运维提供了很⼤的便利。六、总结综上所述,Ignite 和 Spark 功能都很全⾯,已经脱离了简单开源技术组件的范围,都成为了⾃成体系的开源⼤数据平台。上⾯主要对Ignite 和 Spark 的主要功能做了简单的梳理对⽐,不⼀定全⾯,也没有对其各⾃特有的功能进⾏梳理。但经过这么⼀些分析,还是可以得出这样⼀个结论:两者差别很⼤,定位不同,因此会有不同的适⽤领域两者差别很⼤,定位不同,因此会有不同的适⽤领域。IgniteIgnite 以缓存为中⼼构建⼤数据体系,底层存储模型更偏向传统关系型数据架构,上层为应⽤开发的便利做了⼤量的⼯作,包括为各种常见语⾔和协议提供⽀持。中间核⼼层在缓存的基础上不断向外扩展,功能⽇趋丰富强⼤。Ignite 从定位上来说有两个突出点,⼀是可以独⽴组⽹,构建独⽴的⼤数据平台,然后企业在其上开发全新的⼤数据应⽤,包括缓存、计算、流数据处理、机器学习应⽤等等。⼆是还可以与传统应⽤紧密整合,在不颠覆已有架构的前提下,帮助⽤户进⾏传统应⽤的分布式架构转型。为运⾏多年的复杂、运⾏缓慢、技术架构落后的业务系统,提供加速能⼒的同时,引⼊众多的先进功能,⼤幅提升原有系统的能⼒从⽽延长已有架构的寿命,产⽣更⼤的价值,保护客户原有投资。Ignite 的定位和架构,与 Hadoop 体系⼤数据组件有很⼤的不同,但是并不冲突,即使企业已经部署了基于 Hadoop 技术体系的⼤数据平台,那么也可以继续引⼊ Ignite 作为补充。SparkSpark 以计算为中⼼构建⼤数据体系,底层存储对各种数据源进⾏了抽象,总体上更偏向⾮结构化的数据,上层应⽤⽀持多种语⾔,核⼼层基于 RDD 模型,然后进⾏了⼤量的扩展,⽀持了更多更⾼级的功能,⽐如 SparkSQL、Spark Streaming、SparkML 与 SparkGraphX 等。Spark 的核⼼优势是进⾏多轮迭代式计算、交互式计算以及图计算等。Spark 是围绕 RDD 构建⽣态,⽤户可以以 Spark 为中⼼搭建⼤数据平台,满⾜⼤量数据的获取、清洗、处理、加载、计算、存储等需求,核⼼定位是解决⼤数据的分析问题。虽然 Spark 的计算能⼒也可以处理传统的关系型数据,但这并⾮ Spark 的强项,因此和传统业务系统并没有太多的交集。企业基于 Spark 搭建⼤数据平台之后,其上的应⽤基本需要全新开发。传统的数据处理业务,即使适合⽤ Spark实现,原有的业务逻辑也⽆法直接、简单地移植进⼊ Spark 技术堆栈。Spark 技术堆栈更适合⽤于处理传统技术处理起来很⿇烦、性能很差、数据量⼜很⼤的⾮结构化数据,Spark 适合对众多系统的相关数据进⾏整合,通过分析后能产⽣更⼤价值的业务场景。欢迎⼯作⼀到五年的Java⼯程师朋友们加⼊Java架构开发:855801563本群提供免费的学习指导 架构资料 以及免费的解答不懂得问题都可以在本群提出来 之后还会有职业⽣涯规划以及⾯试指导
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1689901838a293466.html
评论列表(0条)