Machine learning ApacheFlink和ApacheSpark作为大规模机器学习的平台?

Machine learning ApacheFlink和ApacheSpark作为大规模机器学习的平台?,machine-learning,apache-spark,apache-flink,Machine Learning,Apache Spark,Apache Flink,有人能把Flink和Spark作为机器学习的平台进行比较吗?对于迭代算法,哪一种可能更好?链接到通用Flink vs Spark讨论:免责声明:我是Apache Flink的PMC成员。我的答案集中在Flink和Spark中执行迭代的差异上 ApacheSpark通过循环展开执行迭代。这意味着,对于每个迭代,都会安排和执行一组新的任务/操作符。Spark可以非常有效地完成这项任务,因为它非常擅长低延迟任务调度(顺便说一句,Spark流媒体使用相同的机制),并且在迭代过程中将数据缓存在内存中。因此

有人能把Flink和Spark作为机器学习的平台进行比较吗?对于迭代算法,哪一种可能更好?链接到通用Flink vs Spark讨论:

免责声明:我是Apache Flink的PMC成员。我的答案集中在Flink和Spark中执行迭代的差异上

ApacheSpark通过循环展开执行迭代。这意味着,对于每个迭代,都会安排和执行一组新的任务/操作符。Spark可以非常有效地完成这项任务,因为它非常擅长低延迟任务调度(顺便说一句,Spark流媒体使用相同的机制),并且在迭代过程中将数据缓存在内存中。因此,每个迭代都对内存中保存的上一个迭代的结果进行操作。在Spark中,迭代作为循环的常规实现(请参阅)


Flink以循环数据流的形式执行迭代程序。这意味着一个数据流程序(及其所有操作符)只调度一次,数据从迭代的尾部反馈到头部。基本上,数据是在迭代中围绕操作符循环流动的。由于操作符只调度一次,所以它们可以在所有迭代中保持状态。Flink的API提供了两种专用于指定迭代的方法:1)批量迭代,这在概念上类似于循环展开;2)批量迭代。增量迭代可以显著加快某些算法,因为每次迭代的工作量随着迭代次数的增加而减少。例如,delta迭代PageRank实现的第10次迭代完成得比第一次迭代快得多。

根据我在ML和数据流处理方面的经验。Flink和Spark擅长不同的领域,在ML场景中它们可以相互补充。Flink能够胜任在线学习任务,在在线学习任务中,我们通过使用新事件不断更新部分模型,同时实时进行推理。部分模型还可以合并Spark离线基于历史数据构建的预先训练的模型。

Flink是一个相对年轻的项目,很难将这个新的有希望的框架与Spark这样一个巨大的项目进行比较。我现在不回答这个问题,因为我们将在不久的将来对这两个ML框架进行更深入的研究。现在我完全同意@ipoteka。你应该看看Flink最近创建的机器学习库:。正如你在这里看到的,我们计划做更多的事情:谢谢你的解释!Flink可以在迭代之间保留工作节点上的状态和运算符,这一点我理解正确吗?这是否意味着与每次新迭代都发送任务的Spark相比,迭代的开销可能更小?是的,Flink将使workers上的操作符保持运行(因此您可以在迭代之间轻松保持状态)。这样,就可以为每次迭代节省重新部署任务的时间。特别是Fabian提到的delta迭代特性,只运行几秒钟的迭代(在数据的一小部分上)是可能的。听起来不错!在Flink中,每次迭代的固定开销有多长?0.1秒的顺序?更好?假设算法什么都不做,只是迭代。好问题。我不知道有哪一个基准试图准确衡量这一点。应该取决于扩展(并行任务的数量)和迭代中运行的数据量。