2015-04-21 149 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