1. 程式人生 > >Spark與Flink:對比與分析

Spark與Flink:對比與分析

Spark是一種快速、通用的計算集群系統,Spark提出的最主要抽象概念是彈性分散式資料集(RDD),它是一個元素集合,劃分到叢集的各個節點上,可以被並行操作。使用者也可以讓Spark保留一個RDD在記憶體中,使其能在並行操作中被有效的重複使用。Flink是可擴充套件的批處理和流式資料處理的資料處理平臺,設計思想主要來源於Hadoop、MPP資料庫、流式計算系統等,支援增量迭代計算。

原理

Spark 1.4特點如下所示。

  1. Spark為應用提供了REST API來獲取各種資訊,包括jobs、stages、tasks、storage info等。
  2. Spark Streaming增加了UI,可以方便使用者檢視各種狀態,另外與Kafka的融合也更加深度,加強了對Kinesis的支援。
  3. Spark SQL(DataFrame)新增ORCFile型別支援,另外還支援所有的Hive metastore。
  4. Spark ML/MLlib的ML pipelines愈加成熟,提供了更多的演算法和工具。
  5. Tungsten專案的持續優化,特別是記憶體管理、程式碼生成、垃圾回收等方面都有很多改進。
  6. SparkR釋出,更友好的R語法支援。


圖1 Spark架構圖


圖2 Flink架構圖


圖3 Spark生態系統圖

Flink 0.9特點如下所示。

  1. DataSet API 支援Java、Scala和Python。
  2. DataStream API支援Java and Scala。
  3. Table API支援類SQL。
  4. 有機器學習和圖處理(Gelly)的各種庫。
  5. 有自動優化迭代的功能,如有增量迭代。
  6. 支援高效序列化和反序列化,非常便利。
  7. 與Hadoop相容性很好。


圖4 Flink生態系統圖

分析對比

效能對比

首先它們都可以基於記憶體計算框架進行實時計算,所以都擁有非常好的計算效能。經過測試,Flink計算效能上略好。

測試環境:

  1. CPU:7000個;
  2. 記憶體:單機128GB;
  3. 版本:Hadoop 2.3.0,Spark 1.4,Flink 0.9
  4. 資料:800MB,8GB,8TB;
  5. 演算法:K-means:以空間中K個點為中心進行聚類,對最靠近它們的物件歸類。通過迭代的方法,逐次更新各聚類中心的值,直至得到最好的聚類結果。
  6. 迭代:K=10,3組資料


圖5 迭代次數(縱座標是秒,橫座標是次數)

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

流式計算比較

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

與Hadoop相容

計算的資源排程都支援YARN的方式

資料存取都支援HDFS、HBase等資料來源。

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

SQL支援

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

計算迭代

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


圖6 Hadoop(MR)迭代流程


圖7 Spark迭代流程


圖8 Flink迭代流程

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


圖9 Flink自動優化迭代程式具體流程

社群支援

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

總結

Spark和Flink都支援實時計算,且都可基於記憶體計算。Spark後面最重要的核心元件仍然是Spark SQL,而在未來幾次釋出中,除了效能上更加優化外(包括程式碼生成和快速Join操作),還要提供對SQL語句的擴充套件和更好地整合。至於Flink,其對於流式計算和迭代計算支援力度將會更加增強。無論是Spark、還是Flink的發展重點,將是資料科學和平臺API化,除了傳統的統計演算法外,還包括學習演算法,同時使其生態系統越來越完善。