集成spark_全面对比,深度解析 Ignite 与 Spark
經(jīng)常有人拿 Ignite 和 Spark 進(jìn)行比較,然后搞不清兩者的區(qū)別和聯(lián)系。Ignite 和 Spark,如果籠統(tǒng)歸類,都可以歸于內(nèi)存計(jì)算平臺(tái),然而兩者功能上雖然有交集,并且 Ignite 也會(huì)對(duì) Spark 進(jìn)行支持,但是不管是從定位上,還是從功能上來(lái)說(shuō),它們差別巨大,適用領(lǐng)域有顯著的區(qū)別。本文從各個(gè)方面對(duì)此進(jìn)行對(duì)比分析,供各位技術(shù)選型參考。
一、綜述
Ignite 和 Spark 都為 Apache 的頂級(jí)開(kāi)源項(xiàng)目,遵循 Apache 2.0 開(kāi)源協(xié)議,經(jīng)過(guò)多年的發(fā)展,二者都已經(jīng)脫離了單一的技術(shù)組件或者框架的范疇,向著多元化的生態(tài)圈發(fā)展,并且發(fā)展速度都很快。
Ignite
Ignite 技術(shù)來(lái)源于 GridGain 公司的商業(yè)產(chǎn)品,于 2014 年將絕大部分功能捐贈(zèng)給 Apache 社區(qū),并于 2015 年 8 月畢業(yè)成為 Apache 的頂級(jí)項(xiàng)目。Ignite 目前一直保持著高強(qiáng)度的快速迭代式開(kāi)發(fā),基本一個(gè)季度發(fā)布一個(gè)大版本,從提交數(shù)量、版本發(fā)布數(shù)量等若干指標(biāo)來(lái)評(píng)估,一直保持在 Apache 社區(qū) 300 多個(gè)開(kāi)源項(xiàng)目的前五位。目前已經(jīng)聚攏了來(lái)自多家組織或公司的眾多開(kāi)發(fā)者,處于非常活躍的狀態(tài),開(kāi)發(fā)者社區(qū)和產(chǎn)品生態(tài)正在形成中。
Spark
作為 Hadoop 生態(tài)圈重要成員的 Spark 于 2009 年由 Matei Zaharia 在加州大學(xué)伯克利分校 AMPLab 開(kāi)發(fā),于 2013 年 6 月捐贈(zèng)給 Apache 基金會(huì)并切換協(xié)議至 Apache2.0,2014 年 2 月畢業(yè)成為 Apache 的頂級(jí)項(xiàng)目。鑒于 Spark 核心計(jì)算模型的先進(jìn)性,它吸引了眾多大企業(yè)和組織的積極參與,促成了 Spark 的高速發(fā)展和社區(qū)的空前繁榮,隨著 Spark 技術(shù)不斷地向縱深發(fā)展以及向外延伸,形成了龐大的 Spark 社區(qū)和生態(tài)圈,目前幾乎成為了大數(shù)據(jù)領(lǐng)域影響力最大的開(kāi)源項(xiàng)目。
二、定位
Ignite 和 Spark 都是分布式架構(gòu),都?xì)w類于目前的大數(shù)據(jù)技術(shù)類別,二者都是利用大量?jī)?nèi)存的高性能,為原有的技術(shù)方案進(jìn)行提速,但是定位差別很大。
Ignite
Ignite 的核心定位是一個(gè)分布式的內(nèi)存緩存解決方案,通過(guò)將數(shù)據(jù)保存在內(nèi)存中,提供比傳統(tǒng)的基于磁盤(pán)的方案更快的性能。然后在分布式緩存的基礎(chǔ)上,一方面進(jìn)一步深入,通過(guò)標(biāo)準(zhǔn) SQL 功能的引入,向分布式內(nèi)存數(shù)據(jù)庫(kù)的方向發(fā)展,一方面功能不斷擴(kuò)展,引入了內(nèi)存計(jì)算、流數(shù)據(jù)處理、機(jī)器學(xué)習(xí)等功能。Ignite 部署靈活,可以輕易地集成進(jìn)已有的系統(tǒng),非常方便地與已有的數(shù)據(jù)庫(kù)系統(tǒng)集成(NoSQL、HDFS 也支持),為已有的業(yè)務(wù)進(jìn)行加速服務(wù)。不顛覆已有架構(gòu),是 Ignite 很重要的邏輯。
Spark
Spark 的核心定位是一個(gè)分布式統(tǒng)一大數(shù)據(jù)分析引擎,通過(guò)先進(jìn)的 RDD 模型和大量?jī)?nèi)存的使用,解決了使用 Hadoop 的 MapReduce 進(jìn)行多輪迭代式計(jì)算的性能問(wèn)題。然后在 RDD 的基礎(chǔ)上不斷完善,引入了 Dataset 和 DataFrame、SparkSQL、Spark Streaming、SparkML 等更高級(jí)的功能。Spark 對(duì) Hadoop 技術(shù)棧有非常好的支持,很多可以直接集成,雖然也可以支持 RDBMS 的讀寫(xiě),但是這不是 Spark 主要的關(guān)注方向。
三、核心技術(shù)
Ignite 和 Spark 核心技術(shù)截然不同。
Ignite
Ignite 的核心數(shù)據(jù)結(jié)構(gòu)為分布式哈希,即鍵-值型存儲(chǔ),和 Redis 等可以歸于同一類,對(duì)于分布式內(nèi)存數(shù)據(jù)庫(kù),核心技術(shù)來(lái)源于 H2 數(shù)據(jù)庫(kù),也即 Ignite 對(duì) SQL 的支持來(lái)源于 H2 的 SQL 引擎。Ignite 的核心計(jì)算模型為 MapReduce+支持 SQL 查詢的緩存優(yōu)化。
Ignite 的內(nèi)存數(shù)據(jù)模型為固化內(nèi)存架構(gòu),同時(shí)支持內(nèi)存存儲(chǔ)和磁盤(pán)存儲(chǔ)(可選)。數(shù)據(jù)保存在堆外,因此只要內(nèi)存夠用,不用擔(dān)心內(nèi)存溢出,也不用擔(dān)心大量占用內(nèi)存導(dǎo)致垃圾回收暫停。
Spark
Spark 的核心是建立在統(tǒng)一的抽象 RDD 之上,使得 Spark 的各個(gè)組件可以無(wú)縫進(jìn)行集成,在同一個(gè)應(yīng)用程序中完成大數(shù)據(jù)計(jì)算任務(wù)。RDD 的設(shè)計(jì)理念源自 AMP 實(shí)驗(yàn)室發(fā)表的論文《Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing》。RDD 可以認(rèn)為是 MapReduce 的超集,也即 RDD 也可以實(shí)現(xiàn)傳統(tǒng)的 MapReduce 計(jì)算機(jī)制。
四、部署模型
Ignite 和 Spark 的組網(wǎng)基本模式有很大的不同,但在更高層面的資源管理上,支持能力是差不多的。
Ignite
Ignite 集群基于無(wú)共享架構(gòu),所有的集群節(jié)點(diǎn)都是平等的、獨(dú)立的,整個(gè)集群不存在單點(diǎn)故障。 通過(guò)靈活的 Discovery SPI 組件,Ignite 節(jié)點(diǎn)可以自動(dòng)地發(fā)現(xiàn)對(duì)方,因此只要需要,可以輕易地對(duì)集群進(jìn)行縮放。
Ignite 可以獨(dú)立運(yùn)行,可以組成集群,可以運(yùn)行于 Kubernetes 和 Docker 容器中,也可以運(yùn)行在 Apache Mesos 以及 Hadoop Yarn 上,可以運(yùn)行于虛擬機(jī)和云環(huán)境,也可以運(yùn)行于物理機(jī),從技術(shù)上來(lái)說(shuō),集群部署在哪里,是沒(méi)有限制的。
Ignite 還支持嵌入式部署,也就是和應(yīng)用集成在一起。
Spark
Spark 支持四種分布式部署方式:分別是 Standalone、Spark on Mesos、Spark on YARN 和 Kubernetes。
Spark 的部署屬于 Master/Slave 模式,可能存在單點(diǎn)故障問(wèn)題,但是可以通過(guò) ZooKeeper 解決。
五、功能
內(nèi)存計(jì)算
Ignite 和 Spark 都有內(nèi)存計(jì)算的能力,尤其內(nèi)存計(jì)算是 Spark 的主打功能,從技術(shù)原理上來(lái)看它們的能力:SparkRDD > Ignite MapReduce+Cache > Hadoop MapReduce。
但具體來(lái)說(shuō),Ignite 的計(jì)算模型優(yōu)于 Hadoop 毋庸置疑。但是 Ignite 和 Spark,雖然 Ignite 技術(shù)原理上不如 SparkRDD 先進(jìn),但是落實(shí)到具體的實(shí)踐中,則要看具體的業(yè)務(wù)場(chǎng)景、技術(shù)人員對(duì)技術(shù)和設(shè)計(jì)的掌控力、代碼優(yōu)化程度等,無(wú)法直接下結(jié)論,這個(gè)要具體問(wèn)題具體分析。
Spark 擅長(zhǎng)的多輪迭代式計(jì)算、交互式計(jì)算、圖計(jì)算等,Ignite 則沒(méi)有對(duì)應(yīng)的解決方案。
Ignite
Ignite 的計(jì)算功能原理與 Hadoop 一致,都是 MapReduce 范式,即可以將一個(gè)批量任務(wù)拆分為多個(gè)部分,然后在不同的節(jié)點(diǎn)并行執(zhí)行,這樣就可以并行地利用所有節(jié)點(diǎn)的資源,來(lái)減少計(jì)算任務(wù)的整體執(zhí)行時(shí)間。
但是 Ignite 的計(jì)算有兩個(gè)重要的獨(dú)特之處,一個(gè)是鑒于 Ignite 靈活的部署模型,Ignite 可以是離線計(jì)算,也可以是在線計(jì)算,對(duì)于在線的場(chǎng)景,比如 OLTP 業(yè)務(wù),它可以通過(guò)將請(qǐng)求中的計(jì)算負(fù)載同步地放在多個(gè)可用節(jié)點(diǎn)上,然后將結(jié)果返回,這樣可以提高整個(gè)系統(tǒng)的擴(kuò)展性和容錯(cuò)能力。 另一個(gè)是計(jì)算可以和數(shù)據(jù)并置,即計(jì)算會(huì)被發(fā)送到要處理的數(shù)據(jù)所在的節(jié)點(diǎn),這樣會(huì)使開(kāi)銷最小化。
Spark
Spark 的計(jì)算模型從原理上來(lái)說(shuō),作為 MapReduce 的超集是非常先進(jìn)的,Spark 也具有 MapReduce 的機(jī)制和開(kāi)發(fā)接口,所以用 Spark 實(shí)現(xiàn) MapReduce 計(jì)算模型是可以的。
Spark 的核心概念 RDD,作為一個(gè)通用的數(shù)據(jù)抽象,著重解決了 MapReduce 模型在處理多輪迭代式算法(比如機(jī)器學(xué)習(xí)、圖算法等)的性能瓶頸,避免了中間結(jié)果落盤(pán)導(dǎo)致的大量數(shù)據(jù)復(fù)制、磁盤(pán) IO 和序列化開(kāi)銷。但是 Spark 的計(jì)算功能是按照離線系統(tǒng)設(shè)計(jì)的,無(wú)法實(shí)現(xiàn) Ignite 的在線計(jì)算功能。
存儲(chǔ)支持能力
Ignite 和 Spark 都可以將第三方存儲(chǔ)作為數(shù)據(jù)來(lái)源用作后續(xù)的處理,兩者對(duì)第三方存儲(chǔ)的支持程度、側(cè)重點(diǎn)完全不同。這里說(shuō)的第三方存儲(chǔ),暫時(shí)劃分為傳統(tǒng)的 RDBMS 和 NoSQL(HDFS、Hive、Cassandra 等)。但是 Ignite 在支持第三方存儲(chǔ)的同時(shí),本身還具有原生持久化的能力。
Ignite
- RDBMS:Ignite 作為一個(gè)緩存系統(tǒng),天然對(duì) RDBMS 有良好的支持,基本上只要支持 JDBC/ODBC 協(xié)議的數(shù)據(jù)庫(kù)都沒(méi)有問(wèn)題。對(duì)于數(shù)據(jù)的加載、數(shù)據(jù)的讀寫(xiě)及其一致性(事務(wù))保證、各種工具的支持、各種通信協(xié)議的支持都一應(yīng)俱全,是一個(gè)完整的方案;
- NoSQL:Ignite 對(duì)于各種 NoSQL 數(shù)據(jù)庫(kù)的支持是有限的,因?yàn)楣δ芏ㄎ坏脑?#xff0c;不是任何 NoSQL 產(chǎn)品都適合和 Ignite 整合進(jìn)而提升能力,就目前來(lái)說(shuō),Ignite 在不同的功能場(chǎng)景對(duì) NoSQL 提供了支持,包括對(duì) HDFS 的支持,也包括與 Cassandra 的原生集成;
- 原生持久化:Ignite 基于固化內(nèi)存架構(gòu),提供了原生持久化,可以同時(shí)處理存儲(chǔ)于內(nèi)存和磁盤(pán)上的數(shù)據(jù)和索引,它將內(nèi)存計(jì)算的性能和擴(kuò)展性與磁盤(pán)持久化和強(qiáng)一致性整合到一個(gè)系統(tǒng)中。 原生持久化以有限的性能損失,透明地提供了更強(qiáng)大的功能,即使整個(gè)集群重啟,內(nèi)存不需要預(yù)熱,數(shù)據(jù)可以直接訪問(wèn)。
Spark
- RDBMS:SparkRDD 可以將 RDBMS 作為數(shù)據(jù)來(lái)源之一,支持 RDBMS 數(shù)據(jù)的批量讀寫(xiě),也支持各種類型的 RDBMS,但是 Spark 對(duì) RDBMS 的讀寫(xiě),屬于批量模式,Spark 更多地會(huì)將 RDBMS 作為分析型業(yè)務(wù)的數(shù)據(jù)來(lái)源之一,最后如有必要,則將業(yè)務(wù)分析的結(jié)果批量回寫(xiě) RDBMS;
- NoSQL:Spark 原生支持 JDBC、JSON、Parquet、csv、libsvm 以及 orcFile 等,也可以通過(guò)擴(kuò)展接口自定義數(shù)據(jù)源。Spark 可以直接或者通過(guò)各種連接器讀取 Hive、Hbase、Cassandra 中的數(shù)據(jù),然后創(chuàng)建對(duì)應(yīng)的 RDD,寫(xiě)入也是同理,這個(gè)能力是 Ignite 所不具備的;
- 原生持久化:Spark 不具備原生的持久化能力。
SQL
Ignite 和 Spark 都支持 SQL,但是兩者的定位和能力,有所不同。
Ignite
Ignite SQL 目前的語(yǔ)法兼容于 ANSI-99,支持查詢、刪除、更新與插入,但語(yǔ)法和功能與標(biāo)準(zhǔn)并不完全一致。Ignite 如果做好了數(shù)據(jù)并置,SQL 查詢的性能是很好的,同時(shí) Ignite 還支持索引,這都進(jìn)一步提升了 Ignite SQL 的能力。另外,Ignite SQL 對(duì)緩存的功能進(jìn)行了極大的增強(qiáng),通常用于緩存的在線查詢和計(jì)算,用于離線數(shù)據(jù)處理也是可以的。
Spark
SparkSQL 最初來(lái)源于 Shark 項(xiàng)目,后來(lái)兩者進(jìn)行了合并,SparkSQL 構(gòu)建于 Dataset/DataFrame 機(jī)制基礎(chǔ)上,目前只支持查詢,主要適用于分析型業(yè)務(wù)以及對(duì)來(lái)自不同數(shù)據(jù)源的結(jié)構(gòu)化數(shù)據(jù)進(jìn)行處理。它也可以進(jìn)行交互式查詢,因?yàn)椴恢С炙饕鹊仍?#xff0c;所以性能較差,響應(yīng)時(shí)間可能較長(zhǎng)。
數(shù)據(jù)一致性(事務(wù))
Ignite
Ignite 整體來(lái)說(shuō)對(duì)事務(wù)的支持還不完善,具體來(lái)說(shuō),在鍵-值 API 層面,有完善的事務(wù)機(jī)制,主要原理來(lái)自于經(jīng)過(guò)優(yōu)化的二階段提交協(xié)議,但是 SQL 層面的 DML 語(yǔ)句還不支持事務(wù),未來(lái)版本會(huì)解決該問(wèn)題。
在計(jì)算層面,因?yàn)橹С重S富的編程接口,也可以非常容易地與各種開(kāi)源的 ORM 框架集成,所以也可以方便地對(duì)事務(wù)進(jìn)行細(xì)粒度的控制,比如 CRUD 都是沒(méi)問(wèn)題的。
Spark
SparkSQL 本身并不提供事務(wù)機(jī)制。Spark 本身也不適用于 RDBMS 的細(xì)粒度數(shù)據(jù)維護(hù),RDBMS 對(duì)于 Spark 來(lái)說(shuō),只是數(shù)據(jù)的一個(gè)來(lái)源和存儲(chǔ)地之一,通常都是批量操作,如果批量操作失敗,Spark 有容錯(cuò)機(jī)制可以重來(lái),以保證整體的一致性。
流計(jì)算
Spark 有 Spark Streaming,Ignite 也支持流數(shù)據(jù)處理。
Ignite
Ignite 可以與主流的流處理技術(shù)和框架進(jìn)行集成,比如 Kafka、Camel、Storm 與 JMS,提供可擴(kuò)展和容錯(cuò)的能力。流處理技術(shù)為 Ignite 提供了一種數(shù)據(jù)加載機(jī)制,針對(duì)流式數(shù)據(jù),Ignite 也提供了各種處理和查詢功能。Ignite 社區(qū)官方提供了 10 種流處理技術(shù)的集成實(shí)現(xiàn),利用統(tǒng)一的 API,開(kāi)發(fā)者也可以自行開(kāi)發(fā)流處理技術(shù)實(shí)現(xiàn)。Ignite 為所有流入 Ignite 的數(shù)據(jù)以可擴(kuò)展和容錯(cuò)的方式提供至少一次保證。
Spark
Spark Streaming 是基于 Spark 的流式批處理引擎,其基本原理是把輸入數(shù)據(jù)以某一時(shí)間間隔批量的處理,即以時(shí)間為單位切分?jǐn)?shù)據(jù)流,每個(gè)切片內(nèi)的數(shù)據(jù)對(duì)應(yīng)一個(gè) RDD,進(jìn)而可以采用 Spark 引擎進(jìn)行快速計(jì)算。其同樣支持眾多的數(shù)據(jù)源,內(nèi)部的數(shù)據(jù)表示形式為 DStream。Spark Streaming 吞吐量高,可以做復(fù)雜的業(yè)務(wù)邏輯,但是秒級(jí)別的延遲是否符合業(yè)務(wù)需求需要確認(rèn)。Spark Streaming 可以與 Spark 其他技術(shù)完美集成,包括 SparkML、SparkSQL 等。
機(jī)器學(xué)習(xí)
Ignite 和 Spark 都支持機(jī)器學(xué)習(xí)。
Ignite
Ignite 從 2.5 版本開(kāi)始,提供了完整的機(jī)器學(xué)習(xí)解決方案,Ignite 的機(jī)器學(xué)習(xí)有兩個(gè)優(yōu)點(diǎn):一個(gè)是如果已經(jīng)在 Ignite 中持有了大量的數(shù)據(jù),那么繼續(xù)在 Ignite 中進(jìn)行機(jī)器學(xué)習(xí)的訓(xùn)練和推理,就不需要在不同系統(tǒng)間進(jìn)行 ETL 的等待,提高效率。另一個(gè)是 Ignite 提供了一系列的機(jī)器學(xué)習(xí)和深度學(xué)習(xí)算法,對(duì) Ignite 的分布式并置處理進(jìn)行優(yōu)化,這樣在處理大規(guī)模的數(shù)據(jù)集或者不斷增長(zhǎng)的輸入數(shù)據(jù)流時(shí),提供了內(nèi)存級(jí)的速度和近乎無(wú)限的擴(kuò)展性,而不需要將數(shù)據(jù)移到另外的存儲(chǔ)。目前支持的算法包括回歸、分類、聚類以及對(duì)數(shù)據(jù)進(jìn)行預(yù)處理等。另外 Ignite 還支持了一組遺傳算法,該算法適合于以最優(yōu)的方式檢索大量復(fù)雜的數(shù)據(jù)集。
Spark
Spark 很早就包含了機(jī)器學(xué)習(xí)庫(kù),RDD 模型面向的一個(gè)主要場(chǎng)景就是機(jī)器學(xué)習(xí)這樣的多輪迭代式計(jì)算。目前的 Spark 機(jī)器學(xué)習(xí)庫(kù)有 2 個(gè)實(shí)現(xiàn),正在逐步向 SparkML 過(guò)渡,SparkML 基于 DataFrame API,更強(qiáng)大更靈活,而傳統(tǒng)的 MLlib 會(huì)處于維護(hù)狀態(tài)。SparkML 基于 DataFrames 對(duì) API 進(jìn)行了統(tǒng)一,使用體驗(yàn)更友好。可以使用 SparkSQL 等更高級(jí)的功能,支持流水線,特別是特征變換。Spark 的機(jī)器學(xué)習(xí)因?yàn)?RDD 的原因性能更好,支持的算法也更多。
圖計(jì)算
Ignite
暫不支持
Spark
Spark 中包含了 GraphX,這是一個(gè)圖計(jì)算組件。它在 RDD 基礎(chǔ)上引入了新的 Graph 抽象,為了支持圖形計(jì)算,GraphX 公開(kāi)了一組基本運(yùn)算符(例如子圖、連接頂點(diǎn)和聚合消息)以及 Pregel API 的優(yōu)化變型。此外,GraphX 還包括了越來(lái)越多的圖形算法和構(gòu)造者,以簡(jiǎn)化圖形分析任務(wù)。
開(kāi)發(fā)語(yǔ)言和客戶端協(xié)議
Ignite
Ignite 是以 Java 語(yǔ)言為主進(jìn)行開(kāi)發(fā)的,因此可以在 JVM 支持的任何操作系統(tǒng)和架構(gòu)上部署和運(yùn)行。Java 的 API 支持 Ignite 的所有功能,使用 Java 或者 Scala 開(kāi)發(fā)的應(yīng)用,相關(guān)的邏輯可以直接嵌入 Ignite,然后借助于 SQL 以及鍵-值操作與集群進(jìn)行交互,執(zhí)行分布式計(jì)算和機(jī)器學(xué)習(xí)算法等等。
除了 Java,Ignite 還支持 .NET 平臺(tái)與 C++,http://Ignite.NET 和 Ignite C++ 使用 JNI,會(huì)把大部分的調(diào)用轉(zhuǎn)發(fā)給 Java。
Ignite 還支持使用標(biāo)準(zhǔn)的 JDBC 或者 ODBC 連接,可以像其它 SQL 存儲(chǔ)一樣與 Ignite 進(jìn)行交互。Ignite 還為 Java、.NET 和 C++ 開(kāi)發(fā)者提供原生的 SQL API,性能更好。
Ignite 還支持其它的語(yǔ)言訪問(wèn),比如 Python、Ruby、PHP 與 NodeJS,另外還可以考慮使用 Ignite 的二進(jìn)制客戶端協(xié)議接入集群。
Spark
Spark 使用 Scala 語(yǔ)言開(kāi)發(fā),目前支持使用 Scala、Java、Python、R 語(yǔ)言開(kāi)發(fā) Spark 程序。
監(jiān)控運(yùn)維工具支持
Ignite
Ignite 開(kāi)源版沒(méi)有提供圖形化的監(jiān)控工具,但是提供了簡(jiǎn)易的命令行工具,同時(shí)為了簡(jiǎn)化開(kāi)發(fā),Ignite 提供了圖形化的 Web 控制臺(tái)。
Ignite 運(yùn)行時(shí)可以通過(guò) API 接口獲取大量的指標(biāo),通過(guò)編程的方式了解集群的狀況。
如果需要強(qiáng)大的監(jiān)控運(yùn)維工具,可以購(gòu)買(mǎi) GridGain 的商業(yè)版軟件和服務(wù)。如果搭建的是一個(gè)小規(guī)模的集群,鑒于 Ignite 的無(wú)共享架構(gòu),部署運(yùn)維都是比較簡(jiǎn)單的。
Spark
Spark 啟動(dòng)后會(huì)有一個(gè) Web 控制臺(tái),雖然不是很美觀,但是可以從總體上看到 Spark 的當(dāng)前運(yùn)行狀態(tài)。
Spark 屬于 Master/Slave 模式,如果直接拿開(kāi)源版本搭建大規(guī)模集群,部署運(yùn)維還是非常麻煩的,但是國(guó)內(nèi)有很多廠商開(kāi)發(fā)包含 Spark 組件的大數(shù)據(jù)平臺(tái),為部署和運(yùn)維提供了很大的便利。
六、總結(jié)
綜上所述,Ignite 和 Spark 功能都很全面,已經(jīng)脫離了簡(jiǎn)單開(kāi)源技術(shù)組件的范圍,都成為了自成體系的開(kāi)源大數(shù)據(jù)平臺(tái)。上面主要對(duì) Ignite 和 Spark 的主要功能做了簡(jiǎn)單的梳理對(duì)比,不一定全面,也沒(méi)有對(duì)其各自特有的功能進(jìn)行梳理。但經(jīng)過(guò)這么一些分析,還是可以得出這樣一個(gè)結(jié)論:兩者差別很大,定位不同,因此會(huì)有不同的適用領(lǐng)域。
Ignite
Ignite 以緩存為中心構(gòu)建大數(shù)據(jù)體系,底層存儲(chǔ)模型更偏向傳統(tǒng)關(guān)系型數(shù)據(jù)架構(gòu),上層為應(yīng)用開(kāi)發(fā)的便利做了大量的工作,包括為各種常見(jiàn)語(yǔ)言和協(xié)議提供支持。中間核心層在緩存的基礎(chǔ)上不斷向外擴(kuò)展,功能日趨豐富強(qiáng)大。
Ignite 從定位上來(lái)說(shuō)有兩個(gè)突出點(diǎn),一是可以獨(dú)立組網(wǎng),構(gòu)建獨(dú)立的大數(shù)據(jù)平臺(tái),然后企業(yè)在其上開(kāi)發(fā)全新的大數(shù)據(jù)應(yīng)用,包括緩存、計(jì)算、流數(shù)據(jù)處理、機(jī)器學(xué)習(xí)應(yīng)用等等。二是還可以與傳統(tǒng)應(yīng)用緊密整合,在不顛覆已有架構(gòu)的前提下,幫助用戶進(jìn)行傳統(tǒng)應(yīng)用的分布式架構(gòu)轉(zhuǎn)型。為運(yùn)行多年的復(fù)雜、運(yùn)行緩慢、技術(shù)架構(gòu)落后的業(yè)務(wù)系統(tǒng),提供加速能力的同時(shí),引入眾多的先進(jìn)功能,大幅提升原有系統(tǒng)的能力從而延長(zhǎng)已有架構(gòu)的壽命,產(chǎn)生更大的價(jià)值,保護(hù)客戶原有投資。
Ignite 的定位和架構(gòu),與 Hadoop 體系大數(shù)據(jù)組件有很大的不同,但是并不沖突,即使企業(yè)已經(jīng)部署了基于 Hadoop 技術(shù)體系的大數(shù)據(jù)平臺(tái),那么也可以繼續(xù)引入 Ignite 作為補(bǔ)充。
Spark
Spark 以計(jì)算為中心構(gòu)建大數(shù)據(jù)體系,底層存儲(chǔ)對(duì)各種數(shù)據(jù)源進(jìn)行了抽象,總體上更偏向非結(jié)構(gòu)化的數(shù)據(jù),上層應(yīng)用支持多種語(yǔ)言,核心層基于 RDD 模型,然后進(jìn)行了大量的擴(kuò)展,支持了更多更高級(jí)的功能,比如 SparkSQL、Spark Streaming、SparkML 與 Spark GraphX 等。Spark 的核心優(yōu)勢(shì)是進(jìn)行多輪迭代式計(jì)算、交互式計(jì)算以及圖計(jì)算等。
Spark 是圍繞 RDD 構(gòu)建生態(tài),用戶可以以 Spark 為中心搭建大數(shù)據(jù)平臺(tái),滿足大量數(shù)據(jù)的獲取、清洗、處理、加載、計(jì)算、存儲(chǔ)等需求,核心定位是解決大數(shù)據(jù)的分析問(wèn)題。雖然 Spark 的計(jì)算能力也可以處理傳統(tǒng)的關(guān)系型數(shù)據(jù),但這并非 Spark 的強(qiáng)項(xiàng),因此和傳統(tǒng)業(yè)務(wù)系統(tǒng)并沒(méi)有太多的交集。企業(yè)基于 Spark 搭建大數(shù)據(jù)平臺(tái)之后,其上的應(yīng)用基本需要全新開(kāi)發(fā)。傳統(tǒng)的數(shù)據(jù)處理業(yè)務(wù),即使適合用 Spark 實(shí)現(xiàn),原有的業(yè)務(wù)邏輯也無(wú)法直接、簡(jiǎn)單地移植進(jìn)入 Spark 技術(shù)堆棧。Spark 技術(shù)堆棧更適合用于處理傳統(tǒng)技術(shù)處理起來(lái)很麻煩、性能很差、數(shù)據(jù)量又很大的非結(jié)構(gòu)化數(shù)據(jù),Spark 適合對(duì)眾多系統(tǒng)的相關(guān)數(shù)據(jù)進(jìn)行整合,通過(guò)分析后能產(chǎn)生更大價(jià)值的業(yè)務(wù)場(chǎng)景。
歡迎工作一到五年的Java工程師朋友們加入Java架構(gòu)開(kāi)發(fā):855801563
本群提供免費(fèi)的學(xué)習(xí)指導(dǎo) 架構(gòu)資料 以及免費(fèi)的解答
不懂得問(wèn)題都可以在本群提出來(lái) 之后還會(huì)有職業(yè)生涯規(guī)劃以及面試指導(dǎo)
總結(jié)
以上是生活随笔為你收集整理的集成spark_全面对比,深度解析 Ignite 与 Spark的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 信用卡分期能取消吗 提前还款是终结分期的
- 下一篇: java的md5盐值加密_MD5盐值加密