權威指南:Hadoop vs Spark vs Flink –大數據框架比較

一、目的

在本文中,我們將對 Apache Hadoop、Spark、 Flink三者之間的功能進行比較。它們都是

大數據處理技術,以各種特色和優勢迅速佔領了IT大數據處理市場。本文您將瞭解Spark所針對的Hadoop的侷限性以及由於 Spark的缺點而產生Flink數據處理引擎。因此,讓我們開始Hadoop vs Spark vs Flink吧。

權威指南:Hadoop vs Spark vs Flink –大數據框架比較

Hadoop vs Spark vs Flink –大數據框架比較

二、Apache Hadoop,Spark和Flink之間的比較


1. Hadoop vs Spark vs Flink –數據處理

  • Hadoop: 專為批處理而構建的Apache Hadoop。它一次將大量數據集進行輸入,進行處理併產生結果。批處理在處理大量數據時非常穩定。由於數據的大小和系統的計算能力有關,輸出會產生延遲。
  • Spark:Apache Spark也是Hadoop生態系統的一部分 它也是一個批處理系統,但它也支持流處理。
  • Flink:Apache Flink為流和批處理提供了一個運行時。

2. Hadoop vs Spark vs Flink –流引擎

  • Hadoop: Map-reduce是面向批處理的處理工具。它一次將大量數據集輸入到輸入中,進行處理併產生結果。
  • Spark: Apache Spark Streaming以微批處理數據流。每個批次包含在該批次期間到達的事件的集合。但是對於我們需要處理大量實時數據流並實時提供結果的業務而言,這還不夠。
  • Flink: Apache Flink是真正的流引擎。它使用流來處理工作負載:流,SQL,微批處理和批處理。批處理是流數據的有限集合。

3. Hadoop vs Spark vs Flink –數據流

  • Hadoop: MapReduce計算數據流沒有任何循環,這是一個階段鏈。在每個階段,都是使用上一階段的輸出作為本階段的輸入。
  • Spark:儘管機器學習算法是循環數據流,但Spark將其表示為 (DAG) 直接非循環圖 或 有向無環圖。
  • Flink: Flink採用與其他方法不同的方法。它在運行時受控循環依賴圖。這有助於以非常有效的方式表示機器學習算法。

4. Hadoop vs Spark vs Flink –計算模型

  • Hadoop: MapReduce採用了面向批處理的模型。批處理靜態數據。它一次要處理大量數據,對其進行處理,然後將其輸出。
  • Spark: Spark採用了微批處理。微批處理本質上是一種“先收集再處理”的計算模型。
  • Flink: Flink採用連續流式流傳輸模型,實時對數據進行處理,而不會在收集數據或處理數據時出現任何延遲。

5. Hadoop vs Spark vs Flink –性能

  • Hadoop: Apache Hadoop僅支持批處理。它不處理流數據,因此與Hadoop,Spark和Flink相比,性能會降低。
  • Spark:雖然Apache Spark具有出色的社區背景,現在也被認為是最成熟的社區。但是它的流處理效率不如Apache Flink,因為它使用微批處理。
  • Flink: 與其他任何數據處理框架相比,Apache Flink的性能都非常出色。Apache Flink使用閉環迭代,當我們比較Hadoop,Spark和Flink時,它們可使機器學習和圖形處理更快。

6. Hadoop vs Spark vs Flink –內存管理

  • Hadoop: 它提供可配置的內存管理。您可以動態或靜態地執行此操作。
  • Spark: 它提供可配置的內存管理。從Spark 1.6開始已朝著自動進行內存管理的方向發展。
  • Flink: 提供自動內存管理。它具有自己的內存管理系統,與Java的垃圾回收器分開。

7. Hadoop vs Spark vs Flink –容錯

  • Hadoop: MapReduce具有高度的容錯能力。如果Hadoop發生任何故障,則無需從頭開始重新啟動應用程序。
  • Spark: Apache Spark Streaming可進行故障恢復,並且無需任何額外的代碼或配置。
  • Flink: Apache Flink遵循的容錯機制基於Chandy-Lamport分佈式快照。該機制是輕量級的,這導致維持高吞吐率並同時提供強大的一致性保證。

8. Hadoop vs Spark vs Flink –可擴展性

  • Hadoop: MapReduce具有不可思議的可擴展性潛力,已在成千上萬的節點上用於生產。
  • Spark: 它具有高度的可擴展性,我們可以在集群中繼續添加n個節點。大型已知的Spark群集有8000個節點。
  • Flink: Apache Flink也是高度可擴展的,我們可以在集群中繼續添加n個節點。一個已知的大型Flink集群有數千個節點。

9. Hadoop vs Spark vs Flink –迭代處理

  • Hadoop:它不支持迭代處理。
  • Spark: 分批迭代其數據。在Spark中,每個迭代都是有計劃的調度和執行。
  • Flink: 使用其流體系結構迭代數據。可以控制Flink僅處理實際上已更改的數據部分,從而顯著提高作業的性能。

10. Hadoop vs Spark vs Flink –語言支持

  • Hadoop: 主要支持Java,其他支持的語言包括c,c ++,ruby,groovy,Perl,Python。
  • Spark: 它支持Java, Scala, Python and R 。Spark由Scala語言編寫。它提供其他語言(如Java, Scala, Python and R)的API。
  • Flink:它支持 Java, Scala, Python and R。Flink用Java實現。它也提供Scala API。

11. Hadoop vs Spark vs Flink –優化

  • Hadoop:在MapReduce中,必須手動優化作業。有幾種方法可以優化MapReduce作業:正確配置集群,使用組合器,使用LZO壓縮,適當地調整MapReduce Task的數量以及為數據使用最合適和最緊湊的可寫類型。
  • Spark:在Apache Spark中,必須手動優化作業。有一個新的可擴展優化器Catalyst,它基於Scala中的函數編程構造。Catalyst的可擴展設計具有兩個目的:首先,易於添加新的優化技術。第二,使外部開發人員可以擴展優化器。
  • Flink: Apache Flink帶有一個獨立於實際編程接口的優化程序。Flink優化器的工作方式類似於關係數據庫優化器,但是將這些優化應用於Flink程序,而不是SQL查詢。

12. Hadoop vs Spark vs Flink –延遲

  • Hadoop:Hadoop的MapReduce框架相對較慢,因為它旨在支持不同的格式,結構和大量數據。這就是為什麼Hadoop具有比Spark和Flink更高的延遲的原因。
  • Spark: Apache Spark是又一個批處理系統,但是它比Hadoop MapReduce相對更快,因為它通過RDD將許多輸入數據緩存在內存中,並將中間數據保留在內存本身中,最終在完成時或需要時將數據寫入磁盤。
  • Flink: Apache Flink的配置工作量很小,其數據流運行時可實現低延遲和高吞吐量。

13. Hadoop vs Spark vs Flink –處理速度

  • Hadoop: MapReduce的處理速度比Spark和Flink慢。僅由於基於MapReduce的執行的性質而導致出現速度慢,在這種情況下,它會生成大量中間數據,在節點之間交換的數據很多,從而導致巨大的磁盤IO延遲。此外,它必須將大量數據保留在磁盤中以在階段之間進行同步,以便它可以支持從故障中恢復作業。而且,MapReduce中沒有辦法將所有數據子集緩存在內存中。
  • Spark: Apache Spark的處理速度比MapReduce快,因為它通過RDD將許多輸入數據緩存在內存中,並將中間數據保留在內存本身中,最終在完成時或需要時將數據寫入磁盤。Spark比MapReduce快100倍,這表明Spark比Hadoop MapReduce更好。
  • Flink: 由於其流架構,它的處理速度比Spark快。Flink通過僅處理實際上已更改的部分數據來提高作業的性能。

14. Hadoop vs Spark vs Flink –可視化

  • Hadoop: 在Hadoop中,數據可視化工具是zoomdata
    ,它可以直接連接到HDFS ,也可以使用基於SQL-on-Hadoop的技術(例如Impala,HiveSpark SQL, Presto等)直接連接到HDFS
  • Spark: 它提供用於提交和執行作業的Web界面,在該界面上可以看到生成的執行計劃。Flink和Spark都已集成到Apache zeppelin中。它提供數據分析,提取以及發現,可視化和協作。
  • Flink: 它還提供用於提交和執行作業的Web界面。生成的執行計劃可以在此界面上顯示。

15. Hadoop vs Spark vs Flink –恢復

  • Hadoop: MapReduce自然可以對系統故障或故障進行恢復。這是高度容錯的系統。
  • Spark: Apache Spark RDD允許通過重新計算
    DAG來恢復故障節點上的分區,同時還通過檢查點支持與Hadoop更相似的恢復方式,以減少RDD的依賴性。
  • Flink: 它支持檢查點機制,該機制將程序存儲在數據源和數據接收器中,窗口狀態以及用戶定義的狀態,該狀態可在失敗後恢復流作業。

16. Hadoop vs Spark vs Flink –安全性

  • Hadoop: 它支持Kerberos身份驗證,這很難管理。但是,第三方供應商已使組織能夠利用Active Directory Kerberos和LDAP進行身份驗證。
  • Spark: Apache Spark的安全性很少,因為它目前僅支持通過共享機密(密碼認證)進行認證。Spark可以享受的安全性優勢在於,如果您在HDFS上運行Spark,它可以使用HDFS ACL和文件級權限。此外,Spark可以在YARN 上運行以使用Kerberos身份驗證。
  • Flink: Flink通過Hadoop / Kerberos基礎結構提供了用戶身份驗證支持。如果您在YARN上運行Flink,Flink會獲取提交程序的用戶的Kerberos令牌,並使用YARN,HDFS和
    HBase對其進行身份驗證.Flink即將推出的連接器,流式程序可以通過SSL作為流代理進行身份驗證。

17. Hadoop vs Spark vs Flink –成本

  • Hadoop:由於 MapReduce不會嘗試將所有內容存儲在內存中,因此通常可以在比某些替代產品便宜的硬件上運行。
  • Spark:由於spark需要大量RAM才能在內存中運行,因此增加了集群中的內存,逐漸增加了成本。
  • Flink: Apache Flink還需要大量RAM才能在內存中運行,因此它將逐漸增加其成本。

18. Hadoop vs Spark vs Flink –兼容性

  • Hadoop: Apache Hadoop MapReduce和Apache Spark彼此兼容,並且Spark通過JDBC和ODBC共享MapReduce在數據源,文件格式和商業智能工具方面的所有兼容性。
  • Spark: Apache Spark和Hadoop相互兼容。Spark與Hadoop數據兼容。它可以通過YARN或Spark的獨立模式在Hadoop群集中運行,並且可以處理HDFS,HBase,Cassandra,Hive和任何Hadoop InputFormat中的數據。
  • Flink: Apache Flink是可擴展的數據分析框架,與Hadoop完全兼容。它提供了Hadoop兼容性軟件包,以包裝針對Hadoop的MapReduce接口實現的功能並將其嵌入Flink程序中。

19. Hadoop vs Spark vs Flink –抽象

  • Hadoop:在MapReduce中,我們沒有任何類型的抽象。
  • Spark:在Spark中,對於批處理,我們具有Spark RDD抽象和用於流傳輸的DStream,DStream在內部是RDD本身。
  • Flink:在Flink中,我們具有批處理的數據集抽象和流應用程序的DataStreams。

20. Hadoop vs Spark vs Flink –易於使用

  • Hadoop:
    MapReduce開發人員需要手動編寫每個操作的代碼,這使工作變得非常困難。
  • Spark: 因為它有大量的高級操作函數,所以編程很容易。
  • Flink: 它也有高級操作函數。

21. Hadoop vs Spark vs Flink –交互模式

  • Hadoop: MapReduce沒有交互模式。
  • Spark: Apache Spark具有一個交互式shell程序,以學習如何充分利用Apache Spark。這是一個用Scala編寫的Spark應用程序,可提供具有自動完成功能的命令行環境,您可以在其中運行臨時查詢並熟悉Spark的功能。
  • Flink: 它帶有集成的交互式Scala Shell。它既可以用於本地設置,也可以用於群集設置。

22. Hadoop vs Spark vs Flink –實時分析

  • Hadoop: MapReduce不能進行實時數據處理,因為它旨在對大量數據執行離線批處理。
  • Spark:它可以處理實時數據,即以每秒數百萬個事件的速率來自實時事件流的數據。
  • Flink:儘管它還提供快速的批處理數據處理,但它主要用於實時數據分析。

23 。Hadoop vs Spark vs Flink –程序調度

  • Hadoop:Hadoop中的 Scheduler成為可插入組件。有兩個用於多用戶工作負載的調度程序:公平調度程序和容量調度程序。要調度複雜的流程,MapReduce需要一個外部作業調度程序,例如Oozie
  • Spark:由於內存中的計算,Spark充當其自己的流調度程序。
  • Flink: Flink可以使用YARN Scheduler,但是Flink也有自己的Scheduler。

24 。Hadoop vs Spark vs Flink – SQL支持

  • Hadoop:它使用戶可以使用Apache Hive運行SQL查詢。
  • Spark:它使用戶能夠使用Spark-SQL運行SQL查詢。Spark提供了像查詢語言一樣的Hives和像DSL 這樣的Dataframe來查詢結構化數據。
  • Flink:在Flink中,Table API是一種類似於SQL的表達語言,支持諸如DSL之類的數據,並且仍處於測試階段。有計劃添加SQL接口,但不確定何時將其放入框架中。

25 。Hadoop vs Spark vs Flink –緩存

  • Hadoop: MapReduce無法將數據緩存在內存中以滿足將來的需求
  • Spark: 它可以將數據緩存在內存中以進行進一步的迭代,從而增強其性能。
  • Flink: 它可以將數據緩存在內存中以進行進一步的迭代,以增強其性能。

26 。Hadoop vs Spark vs Flink –硬件要求

  • Hadoop: MapReduce在廉價硬件上運行得很好。
  • Spark: Apache Spark需要中高級硬件。由於Spark在數據中緩存數據以進行進一步的迭代,從而增強了其性能。
  • Flink: Apache Flink還需要中高級硬件。Flink還可以將數據緩存在內存中以進行進一步的迭代,從而增強其性能。

27. Hadoop vs Spark vs Flink –機器學習

  • Hadoop:
    它需要機器學習工具,例如Apache Mahout
  • Spark: 它有自己的一套機器學習MLlib。在內存緩存和其他實現細節中,它是實現ML算法的強大平臺。
  • Flink: 它具有FlinkML,它是Flink的機器學習庫。它在運行時支持受控循環依賴圖。與DAG表示相比,這使它們以非常有效的方式表示ML算法。

28. Hadoop vs Spark vs Flink –代碼行

  • Hadoop: Hadoop 2.0具有1,20,000行代碼。更多的行數不會產生更多的錯誤,執行該程序將花費大量時間。
  • Spark: Apache Spark僅用20000行代碼開發。代碼行數少於Hadoop。因此,執行程序所需的時間更少。
  • Flink: Flink使用Scala和Java中開發的,代碼行的數量少於Hadoop。因此,執行程序所需的時間也更少。

29. Hadoop vs Spark vs Flink –高可用性

高可用性是指可以長時間運行的系統或組件。

  • Hadoop:可在高可用性模式下配置。
  • Spark:可在高可用性模式下配置。
  • Flink:可在高可用性模式下配置。

30. Hadoop vs Spark vs Flink – Amazon S3連接器

Amazon Simple Storage Service(Amazon S3)是具有簡單Web服務界面的對象存儲,可以從Web上的任何位置存儲和檢索任何數量的數據。

  • Hadoop:提供對Amazon S3 Connector的支持。
  • Spark:提供對Amazon S3連接器的支持。
  • Flink:提供對Amazon S3連接器的支持。

31. Hadoop vs Spark vs Flink –部署

  • Hadoop:在獨立模式下,Hadoop配置為以單節點,非分佈式模式運行。在偽分佈式模式下,Hadoop以偽分佈式模式運行。因此,區別在於每個Hadoop守護程序都以偽分佈式模式在單獨的Java進程中運行。而在本地模式下,每個Hadoop守護程序都作為單個Java進程運行。在完全分佈式模式下,所有守護程序都在形成多節點群集的單獨節點中執行。
  • Spark:它還提供了一種簡單的獨立部署模式,可在Mesos或YARN集群管理器上運行。它可以通過手動啟動母版和工人來手動啟動,也可以使用我們提供的啟動腳本啟動。也可以在一臺機器上運行這些守護程序進行測試。
  • Flink:它還提供獨立部署模式以在YARN群集管理器上運行。

32. Hadoop vs Spark vs Flink –反壓處理

BackPressure是指當緩衝區已滿且無法接收更多數據時,在I / O交換機上建立數據。在消除數據瓶頸或緩衝區為空之前,不再傳輸任何數據包。

  • Hadoop: 通過手動配置處理BackPressure。
  • Spark: 它還通過手動配置處理BackPressure。
  • Flink: 它通過系統架構隱式處理BackPressure。

33. Hadoop vs Spark vs Flink –消除重複

  • Hadoop:Hadoop中沒有消除重複的功能。
  • Spark: Spark還可以一次準確地處理每條記錄,從而消除了重複。
  • Flink: Apache Flink僅一次處理每條記錄,因此消除了重複。流應用程序可以在計算過程中保持自定義狀態。Flink的檢查點機制可確保在出現故障時狀態只有一次。

34. Hadoop,Spark,Flink – Windows窗口標準

數據流需要分組為多個邏輯流,每個邏輯流都可以應用窗口運算符。

  • Hadoop: 它不支持流傳輸,因此不需要窗口條件。
  • Spark: 它具有基於時間的窗口條件。
  • Flink:它具有基於記錄或任何自定義的用戶定義的Flink窗口條件。

35. Hadoop vs Spark vs Flink – Apache許可證

Apache許可證2.0版(ALv2)是由Apache軟件基金會(ASF)編寫的許可的免費軟件許可證。Apache許可證要求保留版權聲明和免責聲明。

  • Hadoop: Apache許可證2。
  • Spark: Apache許可2。
  • Flink: Apache許可證2。

歡迎小夥伴們 關注+轉發 +評論區留言,發表您的觀點哦!點擊下方藍色字體 “瞭解更多” 可獲取更多資料。


分享到:


相關文章: