1. 程式人生 > >大資料處理引擎Spark與Flink對比分析!

大資料處理引擎Spark與Flink對比分析!

大資料技術正飛速地發展著,催生出一代又一代快速便捷的大資料處理引擎,無論是Hadoop、Storm,還是後來的Spark、Flink。然而,畢竟沒有哪一個框架可以完全支援所有的應用場景,也就說明不可能有任何一個框架可以完全取代另一個。今天,大聖眾包威客平臺(www.dashengzb.cn)將從幾個項出發著重對比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的方式。

  相異點: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化,使其生態系統越來越完善。亦或許,會有更新的大資料處理引擎出