大數據處理引擎Spark與Flink大比拼

大數據技術正飛速地發展着,催生出一代又一代快速便捷的大數據處理引擎,無論是Hadoop、Storm,還是後來的Spark、Flink。然而,畢竟沒有哪一個框架可以完全支持所有的應用場景,也就說明不可能有任何一個框架可以完全取代另一個。今天,將從幾個項出發着重對比Spark與Flink這兩個大數據處理引擎,探討其兩者的區別。 


一、Spark與Flink幾個主要項目的對比與分析 

1.性能對比 

測試環境: 

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支持增量迭代,具有對迭代自動優化的功能。 

結果:Flink勝。 



2.流式計算比較 

相同點:Spark與Flink都支持流式計算。 

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

結果:Flink勝。 



3.與Hadoop兼容性對比 

相同點:Spark與Flink的數據存取都支持HDFS、HBase等數據源,而且,它們的計算資源調度都支持YARN的方式。大聖衆包威客平臺(http://www.dashengzb.cn/) 

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

結果:Flink勝。 



4.SQL支持對比 

相同點:兩者都支持SQL。 

相異點:從範圍上說,Spark對SQL的支持比Flink的要大一些,而且Spark支持對SQL的優化(包括代碼生成和快速Join操作),還要提供對SQL語句的擴展和更好地集成。Flink主要支持對API級的優化。 

結果:Spark勝。 



5.計算迭代對比 

相同點:如下圖所示,Hadoop(MR)、Spark和Flink均能迭代。 





相異點:Flink特有delta-iterations,這讓它能夠在迭代中顯著減少計算。並且Flink具有自動優化迭代程序功能,具體流程如下圖所示。 




結果:Flink勝。 



6.社區支持對比 

相同點:Spark與Flink均有社區支持。 

相異點:Spark社區活躍度比Flink高很多。 

結果:Spark勝。 



二、Spark與Flink的特點剖析 

1.Spark 1.4的6大特點 

衆所周知,提出最主要抽象概念——彈性分佈式數據集(RDD)的是Spark。RDD是一個元素集合,將其劃分到集羣的各個節點上可以被並行操作。當然,用戶也可以讓Spark保留一個RDD在內存裏,讓其能在並行操作中被有效地重複使用。Spark是實至名歸的快速、通用的計算集羣系統。結合下圖Spark架構圖與生態系統圖,可以看出Spark 1.4的6大特點: 




①Spark SQL(DataFrame)添加了ORCFile類型支持以及所有的Hive metastore支持; 

②增加了UI的Spark Streaming,使得用戶查看各種狀態更加地便捷,隨着和Kafka融合的加深,對Kinesis的支持也加強了很多; 

③Spark之所以提供了更多的算法和工具,是因爲Spark ML/MLlib的ML pipelines越來越成熟; 

④使用了REST API,Spark可以爲應用獲取如jobs、stages、storage info、tasks等各種信息; 

⑤內存管理、代碼生成、垃圾回收等方面都有很多改進,這些都得益於Tungsten項目的持續優化; 

⑥SparkR的發佈讓Spark得到更友好的R語法的支持。 



2.Flink 0.9的7大特點 

作爲可擴展的批處理和流式數據處理的數據處理平臺,Flink的設計思想主要來源於Hadoop、MPP數據庫、流式計算系統等。支持增量迭代計算是Flink最大的特點,而且其對於迭代計算和流式計算的支持力度都將會加強。結合下圖Flink架構圖與生態系統圖,可以看出Flink 0.9的7大特點: 




①搭載DataSet API,讓Flink支持Java、Python和Scala等多種編程語言; 

②同樣地,搭載DataStream API,讓Flink支持Java和Scala; 

③Flink ML和Gelly提供機器學習和圖處理的多種庫; 

④Table API能夠支持類SQL; 

⑤Flink能夠支持高效序列化、反序列化; 

⑥Flink和Hadoop相互兼容; 

⑦Flink擁有自動優化迭代的功能。 


放眼未來,無論是Spark還是Flink,兩者的發展重點都將是數據科學和平臺API化,使其生態系統越來越完善。亦或許,會有更新的大數據處理引擎出現,誰知道呢。

發佈了6 篇原創文章 · 獲贊 40 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章