Apache Flink vs Apache Spark[轉(zhuǎn)載]

Apache Flink vs Apache Spark[轉(zhuǎn)載]

https://www.iteblog.com/archives/1624.html

Apache Flink是什么

Flink是一款新的大數(shù)據(jù)處理引擎贼涩,目標(biāo)是統(tǒng)一不同來(lái)源的數(shù)據(jù)處理。這個(gè)目標(biāo)看起來(lái)和Spark和類似练链。沒(méi)錯(cuò)弄诲,F(xiàn)link也在嘗試解決Spark在解決的問(wèn)題。這兩套系統(tǒng)都在嘗試建立一個(gè)統(tǒng)一的平臺(tái)可以運(yùn)行批量爵憎,流式鸡岗,交互式场勤,圖處理戈锻,機(jī)器學(xué)習(xí)等應(yīng)用歼跟。所以,F(xiàn)link和Spark的目標(biāo)差別并不大格遭,他們最主要的區(qū)別在于實(shí)現(xiàn)的細(xì)節(jié)哈街,后面我會(huì)重點(diǎn)從不同的角度對(duì)比這兩者。

Apache Spark vs Apache Flink

1拒迅、抽象 Abstraction

Spark中骚秦,對(duì)于批處理我們有RDD,對(duì)于流式,我們有DStream璧微,不過(guò)內(nèi)部實(shí)際還是RDD.所以所有的數(shù)據(jù)表示本質(zhì)上還是RDD抽象作箍。后面我會(huì)重點(diǎn)從不同的角度對(duì)比這兩者。在Flink中前硫,對(duì)于批處理有DataSet胞得,對(duì)于流式我們有DataStreams】t?雌饋?lái)和Spark類似懒震,他們的不同點(diǎn)在于:

(一)DataSet在運(yùn)行時(shí)是表現(xiàn)為運(yùn)行計(jì)劃(runtime plans)的

在Spark中,RDD在運(yùn)行時(shí)是表現(xiàn)為java objects的嗤详。通過(guò)引入Tungsten,這塊有了些許的改變瓷炮。但是在Flink中是被表現(xiàn)為logical plan(邏輯計(jì)劃)的葱色,聽(tīng)起來(lái)很熟悉?沒(méi)錯(cuò)娘香,就是類似于Spark中的dataframes苍狰。所以在Flink中你使用的類Dataframe api是被作為第一優(yōu)先級(jí)來(lái)優(yōu)化的。但是相對(duì)來(lái)說(shuō)在Spark RDD中就沒(méi)有了這塊的優(yōu)化了烘绽。
  Flink中的Dataset淋昭,對(duì)標(biāo)Spark中的Dataframe,在運(yùn)行前會(huì)經(jīng)過(guò)優(yōu)化安接。在Spark 1.6翔忽,dataset API已經(jīng)被引入Spark了,也許最終會(huì)取代RDD 抽象盏檐。

(二)Dataset和DataStream是獨(dú)立的API

在Spark中歇式,所有不同的API,例如DStream胡野,Dataframe都是基于RDD抽象的材失。但是在Flink中,Dataset和DataStream是同一個(gè)公用的引擎之上兩個(gè)獨(dú)立的抽象硫豆。所以你不能把這兩者的行為合并在一起操作龙巨,當(dāng)然笼呆,F(xiàn)link社區(qū)目前在朝這個(gè)方向努力(https://issues.apache.org/jira/browse/Flink-2320),但是目前還不能輕易斷言最后的結(jié)果旨别。

2诗赌、內(nèi)存管理

一直到1.5版本,Spark都是試用java的內(nèi)存管理來(lái)做數(shù)據(jù)緩存昼榛,明顯很容易導(dǎo)致OOM或者gc境肾。所以從1.5開(kāi)始,Spark開(kāi)始轉(zhuǎn)向精確的控制內(nèi)存的使用胆屿,這就是tungsten項(xiàng)目了奥喻。

而Flink從第一天開(kāi)始就堅(jiān)持自己控制內(nèi)存試用。這個(gè)也是啟發(fā)了Spark走這條路的原因之一非迹。Flink除了把數(shù)據(jù)存在自己管理的內(nèi)存以外环鲤,還直接操作二進(jìn)制數(shù)據(jù)。在Spark中憎兽,從1.5開(kāi)始冷离,所有的dataframe操作都是直接作用在tungsten的二進(jìn)制數(shù)據(jù)上。

3纯命、語(yǔ)言實(shí)現(xiàn)

Spark是用scala來(lái)實(shí)現(xiàn)的西剥,它提供了Java,Python和R的編程接口亿汞。Flink是java實(shí)現(xiàn)的瞭空,當(dāng)然同樣提供了Scala API
所以從語(yǔ)言的角度來(lái)看,Spark要更豐富一些疗我。因?yàn)槲乙呀?jīng)轉(zhuǎn)移到scala很久了咆畏,所以不太清楚這兩者的java api實(shí)現(xiàn)情況。

4吴裤、API

Spark和Flink都在模仿scala的collection API.所以從表面看起來(lái)旧找,兩者都很類似。下面是分別用RDD和DataSet API實(shí)現(xiàn)的word count

不知道是偶然還是故意的麦牺,API都長(zhǎng)得很像钮蛛,這樣很方便開(kāi)發(fā)者從一個(gè)引擎切換到另外一個(gè)引擎。我感覺(jué)以后這種Collection API會(huì)成為寫(xiě)data pipeline的標(biāo)配枕面。

5愿卒、Steaming

Spark把streaming看成是更快的批處理,而Flink把批處理看成streaming的special case潮秘。這里面的思路決定了各自的方向琼开,其中兩者的差異點(diǎn)有如下這些:

實(shí)時(shí) vs 近實(shí)時(shí)的角度

Flink提供了基于每個(gè)事件的流式處理機(jī)制,所以可以被認(rèn)為是一個(gè)真正的流式計(jì)算枕荞。它非常像storm的model柜候。
而Spark搞动,不是基于事件的粒度,而是用小批量來(lái)模擬流式渣刷,也就是多個(gè)事件的集合鹦肿。所以Spark被認(rèn)為是近實(shí)時(shí)的處理系統(tǒng)。

Spark streaming 是更快的批處理辅柴,而Flink Batch是有限數(shù)據(jù)的流式計(jì)算箩溃。
雖然大部分應(yīng)用對(duì)準(zhǔn)實(shí)時(shí)是可以接受的,但是也還是有很多應(yīng)用需要event level的流式計(jì)算碌嘀。這些應(yīng)用更愿意選擇storm而非Spark streaming涣旨,現(xiàn)在,F(xiàn)link也許是一個(gè)更好的選擇股冗。

流式計(jì)算和批處理計(jì)算的表示

Spark對(duì)于批處理和流式計(jì)算霹陡,都是用的相同的抽象:RDD,這樣很方便這兩種計(jì)算合并起來(lái)表示止状。而Flink這兩者分為了DataSet和DataStream烹棉,相比Spark,這個(gè)設(shè)計(jì)算是一個(gè)糟糕的設(shè)計(jì)怯疤。

對(duì) windowing 的支持

因?yàn)镾park的小批量機(jī)制浆洗,Spark對(duì)于windowing的支持非常有限。只能基于process time集峦,且只能對(duì)batches來(lái)做window辅髓。而Flink對(duì)window的支持非常到位,且Flink對(duì)windowing API的支持是相當(dāng)給力的少梁,允許基于process time,data time,record 來(lái)做windowing。我不太確定Spark是否能引入這些API矫付,不過(guò)到目前為止凯沪,F(xiàn)link的windowing支持是要比Spark好的。Steaming這部分Flink勝

6买优、SQL interface

目前Spark-sql是Spark里面最活躍的組件之一妨马,Spark提供了類似Hive的sql和Dataframe這種DSL來(lái)查詢結(jié)構(gòu)化數(shù)據(jù),API很成熟杀赢,在流式計(jì)算中使用很廣烘跺,預(yù)計(jì)在流式計(jì)算中也會(huì)發(fā)展得很快。至于Flink脂崔,到目前為止滤淳,F(xiàn)link Table API只支持類似DataFrame這種DSL,并且還是處于beta狀態(tài)砌左,社區(qū)有計(jì)劃增加SQL 的interface脖咐,但是目前還不確定什么時(shí)候才能在框架中用上铺敌。所以這個(gè)部分,Spark勝出屁擅。

7偿凭、外部數(shù)據(jù)源的整合

Spark的數(shù)據(jù)源 API是整個(gè)框架中最好的,支持的數(shù)據(jù)源包括NoSql db,parquet,ORC等派歌,并且支持一些高級(jí)的操作弯囊,例如predicate push down。Flink目前還依賴map/reduce InputFormat來(lái)做數(shù)據(jù)源聚合胶果。這一場(chǎng)Spark勝

8匾嘱、Iterative processing

Spark對(duì)機(jī)器學(xué)習(xí)的支持較好,因?yàn)榭梢栽赟park中利用內(nèi)存cache來(lái)加速機(jī)器學(xué)習(xí)算法稽物。
但是大部分機(jī)器學(xué)習(xí)算法其實(shí)是一個(gè)有環(huán)的數(shù)據(jù)流奄毡,但是在Spark中,實(shí)際是用無(wú)環(huán)圖來(lái)表示的贝或,一般的分布式處理引擎都是不鼓勵(lì)試用有環(huán)圖的吼过。但是Flink這里又有點(diǎn)不一樣,F(xiàn)link支持在runtime中的有環(huán)數(shù)據(jù)流咪奖,這樣表示機(jī)器學(xué)習(xí)算法更有效而且更有效率盗忱。這一點(diǎn)Flink勝出。

9羊赵、Stream as platform vs Batch as Platform

Spark誕生在Map/Reduce的時(shí)代趟佃,數(shù)據(jù)都是以文件的形式保存在磁盤中,這樣非常方便做容錯(cuò)處理昧捷。Flink把純流式數(shù)據(jù)計(jì)算引入大數(shù)據(jù)時(shí)代闲昭,無(wú)疑給業(yè)界帶來(lái)了一股清新的空氣。這個(gè)idea非常類似akka-streams這種靡挥。成熟度目前的確有一部分吃螃蟹的用戶已經(jīng)在生產(chǎn)環(huán)境中使用Flink了序矩,不過(guò)從我的眼光來(lái)看,F(xiàn)link還在發(fā)展中跋破,還需要時(shí)間來(lái)成熟簸淀。

結(jié)論

目前Spark相比Flink是一個(gè)更為成熟的計(jì)算框架,但是Flink的很多思路很不錯(cuò)毒返,Spark社區(qū)也意識(shí)到了這一點(diǎn)租幕,并且逐漸在采用Flink中的好的設(shè)計(jì)思路,所以學(xué)習(xí)一下Flink能讓你了解一下Streaming這方面的更迷人的思路拧簸。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末劲绪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌珠叔,老刑警劉巖蝎宇,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異祷安,居然都是意外死亡姥芥,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門汇鞭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)凉唐,“玉大人,你說(shuō)我怎么就攤上這事霍骄√ù眩” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵读整,是天一觀的道長(zhǎng)簿训。 經(jīng)常有香客問(wèn)我,道長(zhǎng)米间,這世上最難降的妖魔是什么强品? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮屈糊,結(jié)果婚禮上的榛,老公的妹妹穿的比我還像新娘。我一直安慰自己逻锐,他們只是感情好夫晌,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著昧诱,像睡著了一般晓淀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上盏档,一...
    開(kāi)封第一講書(shū)人閱讀 52,156評(píng)論 1 308
  • 那天要糊,我揣著相機(jī)與錄音,去河邊找鬼妆丘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛局劲,可吹牛的內(nèi)容都是我干的勺拣。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼鱼填,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼药有!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤愤惰,失蹤者是張志新(化名)和其女友劉穎苇经,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體宦言,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扇单,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了奠旺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜘澜。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖响疚,靈堂內(nèi)的尸體忽然破棺而出鄙信,到底是詐尸還是另有隱情,我是刑警寧澤忿晕,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布装诡,位于F島的核電站,受9級(jí)特大地震影響践盼,放射性物質(zhì)發(fā)生泄漏鸦采。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一宏侍、第九天 我趴在偏房一處隱蔽的房頂上張望赖淤。 院中可真熱鬧,春花似錦谅河、人聲如沸咱旱。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)吐限。三九已至,卻和暖如春褂始,著一層夾襖步出監(jiān)牢的瞬間诸典,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工崎苗, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留狐粱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓胆数,卻偏偏與公主長(zhǎng)得像肌蜻,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子必尼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容