26

谁能将 Flink 和 Spark 作为机器学习平台进行比较?对于迭代算法,哪个可能更好?链接到 Flink 与 Spark 的一般讨论:Apache Spark 和 Apache Flink 有什么区别?

4

2 回答 2

24

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

Apache Spark 通过循环展开来执行迭代。这意味着对于每次迭代,都会安排和执行一组新的任务/操作符。Spark 非常有效地做到了这一点,因为它非常擅长低延迟任务调度(顺便说一下,Spark 流式传输使用相同的机制。)并在迭代中将数据缓存在内存中。因此,每次迭代都对保存在内存中的前一次迭代的结果进行操作。在 Spark 中,迭代被实现为常规的 for 循环(请参阅逻辑回归示例)。

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

于 2015-04-23T09:54:13.617 回答
0

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

于 2019-01-14T06:21:40.353 回答