Apache Flink 和 Apache Spark 都是通用的數(shù)據(jù)處理平臺,它們分別具有許多應(yīng)用程序。它們都可以在獨立模式下使用,并且具有強大的性能。
Flink 和 Spark 都是大數(shù)據(jù)技術(shù)工具,在科技行業(yè)很受歡迎,因為它們可以快速解決大數(shù)據(jù)問題。但是在分析Flink Vs時。Spark在速度方面,F(xiàn)link優(yōu)于Spark,因為它的底層架構(gòu)。
另一方面,Spark 擁有強大的社區(qū)支持和大量的貢獻(xiàn)者。比較兩者的流處理能力時,F(xiàn)link 處理數(shù)據(jù)流要好得多,而 Spark 處理的是微批處理。
它們有一些相似之處,例如類似的 API 和組件,但它們在數(shù)據(jù)處理方面存在一些差異。在大數(shù)據(jù)領(lǐng)域,Apache Spark 和 Flink 是兩大主要技術(shù)。關(guān)于它們以及這兩種技術(shù)的特性和功能,總是存在一些混淆。
Apache Spark 和 Apache Flink 的介紹
Apache Spark 和 Flink迅速占領(lǐng)了Hadoop 大數(shù)據(jù)市場,這些技術(shù)可以提供各種工作角色。由于 Flunk 的出現(xiàn),Spark 存在一些局限性。在這里,我們將詳細(xì)討論它們,因此請繼續(xù)閱讀以進(jìn)一步了解它們。
Apache Spark 介紹
Apache Spark 是一個開源的集群計算框架,該技術(shù)在全球擁有龐大的用戶群。用于編寫 Spark 的基本語言是R、Java、Python和 Scala,它們?yōu)槌绦騿T提供了一個 API,以構(gòu)建一個容錯和只讀的多組數(shù)據(jù)項。在發(fā)布后的短時間內(nèi)(204 年 5 月),僅憑它的高速、處理復(fù)雜分析需求的能力和易用性就必須占據(jù)很大的市場份額。
引入 Apache Spark 是為了最大限度地減少 Hadoop MapReduce 和大數(shù)據(jù)技術(shù)的一些限制。它的速度比 MapReduce 快得多,使其更強大的因素之一是它能夠?qū)⒅虚g結(jié)果保存在內(nèi)存中。在這里,數(shù)據(jù)不會寫回磁盤或再次從磁盤讀取,這可能會變得困難,特別是對于基于迭代的用例。因此,以下是 Spark 的一些主要優(yōu)勢:
- 易用性:Apache Spark 的 API 易于使用,專為操作大型數(shù)據(jù)集而構(gòu)建
- 高速:Apache Spark 可以批量執(zhí)行流程,因此一次它可以以比 MapReduce 快 10 到 100 倍的速度運行和處理作業(yè)。高速并不意味著用戶必須在其磁盤數(shù)據(jù)寫入速度上妥協(xié);相反,它是大規(guī)模磁盤排序方面的世界紀(jì)錄保持者。
- 內(nèi)存數(shù)據(jù)共享:不同的作業(yè)可能需要共享內(nèi)存中的數(shù)據(jù),它可以使其成為交互式、迭代和事件流處理任務(wù)的理想選擇。
- 統(tǒng)一引擎:Spark 可以在 Hadoop 上運行,這就是為什么它也可以在 Hadoop 集群管理器 (YARN) 和 HDFS、HBase 等上運行,如底層存儲。但是,用戶也可以通過將 Spark 與其他集群管理器和存儲平臺(如 Amazon S3 和 Cassandra)一起使用,而無需 Hadoop 即可獨立使用 Spark。它還具有許多更高級別的庫,可以支持 SQL 查詢、機器學(xué)習(xí)、圖形處理和數(shù)據(jù)流。
- 從 Scala、Java 和 Python 中選擇:當(dāng)您使用 Spark 時,您不必使用任何一種語言,即使您愿意使用任何流行的語言,如 R、Python、Java甚至 Clojure。
- 擴(kuò)大和活躍的用戶社區(qū):由于活躍的用戶社區(qū),Spark 用戶可以在發(fā)布后的兩年內(nèi)獲得穩(wěn)定的 Spark 版本。正因為如此,它在世界范圍內(nèi)被接受,并且其受歡迎程度不斷上升。
Apache Flink 介紹
Apache Flink 是開源框架的最新加入者,用于大數(shù)據(jù)分析,并試圖取代 MapReduce 一個類似的框架是 Spark。Flink 于 2016 年 3 月發(fā)布,僅用于在內(nèi)存中處理 Spark 等批處理數(shù)據(jù)作業(yè)。當(dāng)涉及到相同數(shù)據(jù)項的多次迭代處理時,F(xiàn)link 被認(rèn)為非常方便。對于機器學(xué)習(xí)和其他自學(xué)習(xí)、自適應(yīng)學(xué)習(xí)等用例,它應(yīng)該是一個理想的候選者。隨著物聯(lián)網(wǎng)技術(shù)的興起,F(xiàn)link 社區(qū)也面臨著一些挑戰(zhàn)。Flink 的一些顯著優(yōu)勢包括:
- 更好的內(nèi)存管理:Flink 使用顯式內(nèi)存管理,可以幫助擺脫 Spark 框架中偶爾出現(xiàn)的峰值
- 實際的流處理引擎:它具有批處理的能力,而不是其他的。
- 速度:它可以管理更快的速度,這可能需要在同一節(jié)點上進(jìn)行迭代處理,而不是使用多個集群來獨立運行它們。也可以通過調(diào)整它以僅重新處理已更改的數(shù)據(jù)部分而不是未更改的數(shù)據(jù)部分來提高性能。與標(biāo)準(zhǔn)處理算法相比,它可以將速度提高五倍。?
Apache Spark 和 Apache Flink 的對比
特征 | ?Apache Spark | Apache Flink |
數(shù)據(jù)處理 | Apache Spark 是 Hadoop 生態(tài)系統(tǒng)的一部分。基本上,它是一個批處理系統(tǒng),但它也支持流處理。 | Flink 為批處理和數(shù)據(jù)流功能提供了單一的運行時。 |
流媒體引擎 | Apache Spark 以微批次的方式處理數(shù)據(jù)。這里每個批次都包含在批次期間到達(dá)的事件集合。但對于一些用例,有時用戶可能還必須處理大型數(shù)據(jù)流以提供實時結(jié)果。 | Flink 是一個真正的流媒體引擎。Flink 使用的工作負(fù)載流有 micro-batch、batch 和SQL。Batch 是流式數(shù)據(jù)有限集。 |
數(shù)據(jù)流 | Spark 可以將循環(huán)數(shù)據(jù)流表示為有向無環(huán)圖或 DAG。然而,機器學(xué)習(xí)算法是循環(huán)數(shù)據(jù)流。 | Flink 使用的方法完全不同。在這種方法中使用了運行時控制的循環(huán)依賴圖。通過這種方式,可以有效地表示機器學(xué)習(xí)算法。 |
內(nèi)存管理 | Spark 提供可配置的內(nèi)存管理。現(xiàn)在在最新的 Spark 版本中,為用戶提供了自動內(nèi)存管理。 | Flink 還提供自動內(nèi)存管理。除了 Java 的垃圾收集器之外,它使用自己的內(nèi)存管理系統(tǒng)。例如容錯、安全、成本、速度、延遲 |
容錯 | Apache Spark 的容錯級別相當(dāng)高,不需要任何額外的代碼和配置就可以恢復(fù)丟失的工作。它始終提供僅一次語義。 | Flink 遵循 Chandy-Lamport 分布式快照機制來處理容錯。輕量級機制可以保持高吞吐率,同時保證強一致性。 |
可擴(kuò)展性 | Spark 是一個高度可擴(kuò)展的框架,在任何集群中都可以不斷增加節(jié)點的數(shù)量。已知最大的 Spark 集群大約有 8000 個節(jié)點。 | Flink 的可擴(kuò)展性也很高,可以在集群中不斷添加多個節(jié)點。Flink 最大的集群大約有 1000 個節(jié)點。 |
迭代處理 | Spark 批量迭代數(shù)據(jù)。每個 Spark 迭代都必須單獨執(zhí)行和調(diào)度。可以安排 Spark 數(shù)據(jù)進(jìn)行處理,以便您可以離開某些進(jìn)程。 | Flink 數(shù)據(jù)流由流式架構(gòu)執(zhí)行。Flink 只能處理部分?jǐn)?shù)據(jù)部分,尤其是實際發(fā)生變化的部分;它可以顯著提高性能。 |
語言支持 | Apache Spark 支持 Scala、Java、Python 和 R。Spark 在 Scala 中實現(xiàn),并提供許多其他流行編程語言的 API,包括 Java、Python 和 R。 | 另一方面,F(xiàn)link 也支持 Java、Scala、Python 和 R,但是是用 Java 實現(xiàn)的。您也可以在此獲取 Scala API。 |
優(yōu)化 | Apache Scala 的作業(yè)必須手動優(yōu)化。在 MapReduce 的情況下,一些方法用于此目的:通過使用組合器,正確配置集群,使用 LZO 壓縮,通過使用適當(dāng)?shù)目蓪憯?shù)據(jù)類型,以及適當(dāng)調(diào)整 MapReduce 任務(wù)的數(shù)量。 | Apache Flink 還帶有一個不依賴于實際編程接口的優(yōu)化器。該優(yōu)化器的工作原理與關(guān)系數(shù)據(jù)庫優(yōu)化器類似,但優(yōu)化器必須應(yīng)用于 Flink 程序而不是 SQL 查詢。 |
潛伏 | 與 MapReduce 相比,Apache Spark 是一個相對更快的批處理系統(tǒng),因為大部分輸入數(shù)據(jù)被 RDD 捕獲在內(nèi)存中,而中間數(shù)據(jù)則保存在內(nèi)存中。在這里,當(dāng)數(shù)據(jù)在需要時完成時,數(shù)據(jù)最終會寫回到磁盤上。 | 以Apache Flink為例,數(shù)據(jù)流運行時是通過高吞吐量和低風(fēng)險來實現(xiàn)的,也可以說是低延遲。 |
安全 | Apache Spark 安全方面和功能有點稀少,目前僅支持通過共享密碼的共享密碼進(jìn)行身份驗證。如果 Spark 在 HDFS 上運行,那么它可以使用 HDFS ACL 和文件級權(quán)限。此外,如果 Spark 運行在 YARN 上,Kerberos 身份驗證也可以被 Spark 使用。 | 另一方面,F(xiàn)link 支持通過 Hadoop/Kerberos 基礎(chǔ)設(shè)施進(jìn)行用戶身份驗證。如果 Flink 運行在 YARN 上,那么它可以獲取用戶提交用戶程序的 Kerberos 令牌,然后它可以在 HBase、HDFS 和 YARN 上進(jìn)行身份驗證。Flink 即將推出的連接器流程序可以通過 SSL 進(jìn)行身份驗證。 |
成本 | Spark 可能需要大量 RAM 才能在內(nèi)存中運行,當(dāng)它在集群中運行時,其成本會逐漸增加。 | 在 Apache Flink 的情況下,還需要大量 RAM 才能在內(nèi)存中運行,因此 Flink 的成本再次超出預(yù)期。 |
?概括
與 Spark 相比,F(xiàn)link 的安裝數(shù)量并不多。你可以在 Flink 網(wǎng)站上看到它的一些用戶使用這個框架,包括阿里巴巴和第一資本。所以,它肯定會在未來超越測試階段,進(jìn)入主流。然而,由于種種原因,仍有許多用戶在使用 Spark。它還取決于要求和未來的優(yōu)點。