2015-04-21 148 views
23

任何人都可以比較Flink和Spark作爲機器學習的平臺嗎?迭代算法可能更好嗎?鏈接到一般Flink vs Spark討論:What is the difference between Apache Spark and Apache Flink?作爲大型機器學習平臺的Apache Flink vs Apache Spark?

+1

Flink是一個相對年輕的項目,很難將這個新的有前景的框架與Spark這樣的巨大項目進行比較。 – ipoteka

+0

我現在不回答這個問題,因爲我們將在兩個ML框架的不遠的將來有更深入的瞭解。現在我完全同意@ipoteka。 –

+2

您應該查看Flink最近創建的機器學習庫:http://ci.apache.org/projects/flink/flink-docs-master/libs/ml/。 正如你在這裏看到的,我們已經計劃做更多:http://goo.gl/h9Qmt3 –

回答

22

聲明:我是Apache Flink的PMC成員。我的答案着重於Flink和Spark中執行迭代的差異。

Apache Spark通過循環展開執行迭代。這意味着對於每次迭代,一組新的任務/操作員被安排並執行。 Spark非常高效,因爲它非常適合低延遲任務調度(同樣的機制用於Spark串流btw),並在迭代中緩存內存中的數據。因此,每次迭代都會根據內存中保存的上一次迭代的結果進行操作。在Spark中,迭代實現爲常規for-loops(請參閱Logistic Regression example)。

Flink以迭代方式執行程序作爲循環數據流。這意味着數據流程序(及其所有操作符)只調度一次,數據從迭代尾部反饋回頭。基本上,數據在迭代中圍繞操作員循環流動。由於運營商只安排了一次,他們可以在所有迭代中保持狀態。 Flink的API提供了兩個專用iteration operators來指定迭代:1)批量迭代,其概念上類似於循環展開,以及2)delta iterations。 Delta迭代可以顯着加快某些算法的速度,因爲隨着迭代次數的增加,每次迭代的工作量都會減少。例如,Delta迭代PageRank實現的第10次迭代比第一次迭代快得多。

+0

謝謝你的解釋!我是否理解Flink可以在迭代之間保留工作節點上的狀態和操作符?這是否意味着在迭代過程中可能會有更少的開銷,與每次新迭代發送任務的Spark相比? – Alexander

+4

是的,Flink會讓操作員保持工作狀態(所以你可以在迭代之間輕鬆保持狀態)。因此,節省重新部署每次迭代任務的時間。 特別是對於Fabian提到的Delta迭代功能,可能只運行幾秒鐘的迭代(在數據的小部分上)。 –

+0

聽起來不錯! Flink每次迭代的固定開銷多長時間? 0.1秒的順序?更好?假設算法什麼都不做,只是迭代。 – Alexander