2015-04-28 26 views

回答

12

聲明:我是Apache Flink的提交者和PMC成員。

與Hadoop MapReduce類似,Apache Flink是一個具有自己的API和執行引擎的並行數據處理器。 Flink旨在支持許多Hadoop所使用的用例,並與來自Hadoop生態系統(包括HDFS和YARN)的許多系統搭配使用。

我會通過區分MapReduce編程模型和MapReduce執行模型來回答你的問題。

規劃模型

阿帕奇弗林克的編程模型是基於MapReduce編程模型的概念,但它概括在幾個方面。 Flink提供Map和Reduce功能,但也提供其他轉換,如Join,CoGroup,Filter和Iterations。這些轉換可以在任意數據流中組合,包括多個源,接收器以及分支和合並流。 Flink的數據模型比MapReduce的鍵值對模型更通用,並允許使用任何Java(或Scala)數據類型。可以靈活地在這些數據類型上定義密鑰。

因此,Flink的編程模型是MapReduce編程模型的超集。它允許以更方便簡潔的方式定義許多程序。我還想指出,可以在Flink程序中嵌入未修改的Hadoop函數(Input/OutputFormats,Mapper,Reducers),並與本地Flink函數一起執行它們。

執行模式

綜觀執行模型,弗林克借用並行關係數據庫系統的許多概念。 Flink具有流水線處理模型,可減少在本地或分佈式文件系統上實現中間結果的需求(此外,這還允許Flink進行實時流處理)。而且,Flink程序的執行與程序的規範沒有緊密聯繫。在MapReduce中(由Apache Hadoop完成),每個MapReduce程序的執行遵循完全相同的模式。 Flink程序被提供給優化器,該優化器計算出有效的執行計劃。與關係數據庫管理系統類似,優化器選擇數據發送和連接策略,避免了諸如數據混洗和排序等昂貴的操作。我應該指出,Flink尚未在Hadoop運行的大規模橫向測試中進行測試。我知道在多達200個節點上運行的Flink設置。

3

添加到Fabian的答案:

還有一個區別是,弗林克不是一個純粹的批處理系統,但是可以在同一時間低等待時間流分析,並提供一個很好的API定義流分析程序。

在內部,Flink實際上是一個流媒體系統。要閃爍,批處理程序是流式處理程序的特例。