hadoop之Spark強有力競爭者Flink,Spark與Flink:對比與分析


hadoop之Spark強有力競爭者Flink,Spark與Flink:對比與分析

Spark是一種快速、通用的計算集群系統,Spark提出的最主要抽象概念是彈性分布式數據集(RDD),它是一個元素集合,划分到集群的各個節點上,可以被並行操作。而Flink是可擴展的批處理和流式數據處理的數據處理平台。

Apache Flink,apache頂級項目,是一個高效、分布式、基於Java實現的通用大數據分析引擎,它具有分布式 MapReduce一類平台的高效性、靈活性和擴展性以及並行數據庫查詢優化方案,它支持批量和基於流的數據分析,且提供了基於Java,Python和Scala的API,跟Apache Spark非常類似,官網鏈接:https://flink.apache.org

Spark和Flink都支持實時計算,且都可基於內存計算(spark是偽實時的分片技術,只能按每秒分片技術,不能每條數據都實時技術,flink和storm可以)。Spark后面最重要的核心組件仍然是Spark SQL,而在未來幾次發布中,除了性能上更加優化外(包括代碼生成和快速Join操作),還要提供對SQL語句的擴展和更好地集成。至於Flink,其對於流式計算和迭代計算支持力度將會更加增強。無論是Spark、還是Flink的發展重點,將是數據科學和平台API化,除了傳統的統計算法外,還包括學習算法,同時使其生態系統越來越完善。

Spark是一種快速、通用的計算集群系統,Spark提出的最主要抽象概念是彈性分布式數據集(RDD),它是一個元素集合,划分到集群的各個節點上,可以被並行操作。用戶也可以讓Spark保留一個RDD在內存中,使其能在並行操作中被有效的重復使用。Flink是可擴展的批處理和流式數據處理的數據處理平台,設計思想主要來源於Hadoop、MPP數據庫、流式計算系統等,支持增量迭代計算。

1. 原理
  Spark 1.4特點如下所示。

  Spark為應用提供了REST API來獲取各種信息,包括jobs、stages、tasks、storage info等。

  Spark Streaming增加了UI,可以方便用戶查看各種狀態,另外與Kafka的融合也更加深度,加強了對Kinesis的支持。

  Spark SQL(DataFrame)添加ORCFile類型支持,另外還支持所有的Hive metastore。

  Spark ML/MLlib的ML pipelines愈加成熟,提供了更多的算法和工具。

  Tungsten項目的持續優化,特別是內存管理、代碼生成、垃圾回收等方面都有很多改進。

  SparkR發布,更友好的R語法支持。


 Spark架構圖

 

Flink架構圖

 

Spark生態系統圖


  Flink 0.9特點如下所示。

  DataSet API 支持Java、Scala和Python。

  DataStream API支持Java and Scala。

  Table API支持類SQL。

  有機器學習和圖處理(Gelly)的各種庫。

  有自動優化迭代的功能,如有增量迭代。

  支持高效序列化和反序列化,非常便利。

  與Hadoop兼容性很好。


 Flink生態系統圖


2. 分析對比

2.1 性能對比
  首先它們都可以基於內存計算框架進行實時計算,所以都擁有非常好的計算性能。經過測試,Flink計算性能上略好。

  測試環境:

  CPU:7000個;

  內存:單機128GB;

  版本:Hadoop 2.3.0,Spark 1.4,Flink 0.9

  數據:800MB,8GB,8TB;

  算法:K-means:以空間中K個點為中心進行聚類,對最靠近它們的對象歸類。通過迭代的方法,逐次更新各聚類中心的值,直至得到最好的聚類結果。

  迭代:K=10,3組數據


迭代次數(縱坐標是秒,橫坐標是次數)


  總結:Spark和Flink全部都運行在Hadoop YARN上,性能為Flink > Spark > Hadoop(MR),迭代次數越多越明顯,性能上,Flink優於Spark和Hadoop最主要的原因是Flink支持增量迭代,具有對迭代自動優化的功能。

2.2 流式計算比較

  它們都支持流式計算,Flink是一行一行處理,而Spark是基於數據片集合(RDD)進行小批量處理,所以Spark在流式處理方面,不可避免增加一些延時。Flink的流式計算跟Storm性能差不多,支持毫秒級計算,而Spark則只能支持秒級計算。

2.3 與Hadoop兼容

  計算的資源調度都支持YARN的方式

  數據存取都支持HDFS、HBase等數據源。

  Flink對Hadoop有着更好的兼容,如可以支持原生HBase的TableMapper和TableReducer,唯一不足是現在只支持老版本的MapReduce方法,新版本的MapReduce方法無法得到支持,Spark則不支持TableMapper和TableReducer這些方法。

2.4 SQL支持

  都支持,Spark對SQL的支持比Flink支持的范圍要大一些,另外Spark支持對SQL的優化,而Flink支持主要是對API級的優化。

2.5 計算迭代

  delta-iterations,這是Flink特有的,在迭代中可以顯著減少計算,Hadoop(MR)、Spark和Flink的迭代流程:


Hadoop(MR)迭代流程

 

Spark迭代流程

 

Flink迭代流程


  Flink自動優化迭代程序具體流程如圖所示。


Flink自動優化迭代程序具體流程


2.6 社區支持

  Spark社區活躍度比Flink高很多。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM