Spark是一種快速、通用的計(jì)算集群系統(tǒng),Spark提出的最主要抽象概念是彈性分布式數(shù)據(jù)集(RDD),它是一個(gè)元素集合,劃分到集群的各個(gè)節(jié)點(diǎn)上,可以被并行操作。用戶也可以讓Spark保留一個(gè)RDD在內(nèi)存中,使其能在并行操作中被有效的重復(fù)使用。Flink是可擴(kuò)展的批處理和流式數(shù)據(jù)處理的數(shù)據(jù)處理平臺(tái),設(shè)計(jì)思想主要來(lái)源于hadoop、MPP數(shù)據(jù)庫(kù)、流式計(jì)算系統(tǒng)等,支持增量迭代計(jì)算。 中培偉業(yè)《大數(shù)據(jù)平臺(tái)搭建與高性能計(jì)算實(shí)戰(zhàn)》專家蔣老師在這里對(duì)二者進(jìn)行了比較分析。- N, i; @, n/ X; X
張老師指介紹,4 R$ m+ s+ g* |9 u- {5 KSpark 1.4特點(diǎn)如下所示:
5 D6 y) h! b6 Q6 H/ }1.Spark為應(yīng)用提供了REST API來(lái)獲取各種信息,包括jobs、stages、tasks、storage info等。
2.Spark Streaming增加了UI,可以方便用戶查看各種狀態(tài),另外與Kafka的融合也更加深度,加強(qiáng)了對(duì)Kinesis的支持。
% e4 k+ A, w1 K9 A3.Spark SQL(DataFrame)添加ORCFile類型支持,另外還支持所有的Hive metastore。
4.Spark ML/MLlib的ML pipelines愈加成熟,提供了更多的算法和工具。 5.Tungsten項(xiàng)目的持續(xù)優(yōu)化,特別是內(nèi)存管理、代碼生成、垃圾回收等方面都有很多改進(jìn)。
/ E6 R4 o7 E% X" J. H$ P [$ N6.SparkR發(fā)布,更友好的R語(yǔ)法支持。
蔣老師接著介紹了 Flink 0.9有如下特點(diǎn):
; n& P' u* z8 I; L5 M! [" I1.DataSet API 支持Java、Scala和Python。
! s4 l6 {4 ^8 e0 D2.DataStream API支持Java and Scala。
3.Table API支持類SQL。
4.有機(jī)器學(xué)習(xí)和圖處理(Gelly)的各種庫(kù)。
5.有自動(dòng)優(yōu)化迭代的功能,如有增量迭代。
6.支持高效序列化和反序列化,非常便利。
- F/ _0 q. `2 n3 h+ x* T/ p7.與Hadoop兼容性很好。
性能對(duì)比
蔣老師認(rèn)為,首先它們都可以基于內(nèi)存計(jì)算框架進(jìn)行實(shí)時(shí)計(jì)算,所以都擁有非常好的計(jì)算性能。經(jīng)過(guò)測(cè)試,F(xiàn)link計(jì)算性能上略好。
Spark和Flink全部都運(yùn)行在Hadoop YARN上,性能為Flink > Spark > Hadoop(MR),迭代次數(shù)越多越明顯,性能上,F(xiàn)link優(yōu)于Spark和Hadoop最主要的原因是Flink支持增量迭代,具有對(duì)迭代自動(dòng)優(yōu)化的功能。
流式計(jì)算比較
它們都支持流式計(jì)算,F(xiàn)link是一行一行處理,而Spark是基于數(shù)據(jù)片集合(RDD)進(jìn)行小批量處理,所以Spark在流式處理方面,不可避免增加一些延時(shí)。Flink的流式計(jì)算跟Storm性能差不多,支持毫秒級(jí)計(jì)算,而Spark則只能支持秒級(jí)計(jì)算。
Hadoop兼容
2 計(jì)算的資源調(diào)度都支持YARN的方式
數(shù)據(jù)存取都支持HDFS、HBase等數(shù)據(jù)源。
Flink對(duì)Hadoop有著更好的兼容,如可以支持原生HBase的TableMapper和TableReducer,唯一不足是現(xiàn)在只支持老版本的MapReduce方法,新版本的MapReduce方法無(wú)法得到支持,Spark則不支持TableMapper和TableReducer這些方法。
DSQL支持
都支持,Spark對(duì)SQL的支持比Flink支持的范圍要大一些,另外Spark支持對(duì)SQL的優(yōu)化,而Flink支持主要是對(duì)API級(jí)的優(yōu)化。
計(jì)算迭代
這是Flink特有的,在迭代中可以顯著減少計(jì)算。
蔣老師最后總結(jié)道,Spark和Flink都支持實(shí)時(shí)計(jì)算,且都可基于內(nèi)存計(jì)算。Spark后面最重要的核心組件仍然是Spark SQL,而在未來(lái)幾次發(fā)布中,除了性能上更加優(yōu)化外(包括代碼生成和快速Join操作),還要提供對(duì)SQL語(yǔ)句的擴(kuò)展和更好地集成。至于Flink,其對(duì)于流式計(jì)算和迭代計(jì)算支持力度將會(huì)更加增強(qiáng)。無(wú)論是Spark、還是Flink的發(fā)展重點(diǎn),將是數(shù)據(jù)科學(xué)和平臺(tái)API化,除了傳統(tǒng)的統(tǒng)計(jì)算法外,還包括學(xué)習(xí)算法,同時(shí)使其生態(tài)系統(tǒng)越來(lái)越完善。