Apache Flink和Apache Spark作为大规模机器学习的平台?

Ale*_*der 23 machine-learning apache-spark apache-flink

有人可以比较Flink和Spark作为机器学习的平台吗?哪种迭代算法可能更好?链接到一般的Flink vs Spark讨论:Apache Spark和Apache Flink有什么区别?

Fab*_*ske 24

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

Apache Spark通过循环展开来执行迭代.这意味着每次迭代都会调度和执行一组新的任务/运算符.Spark非常有效,因为它非常擅长低延迟任务调度(相同的机制用于Spark流btw.)并在迭代中缓存内存中的数据.因此,每次迭代对前一次迭代的结果进行操作,该结果保存在存储器中.在Spark中,迭代实现为常规for循环(请参阅Logistic回归示例).

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

  • 是的,Flink将让操作员保持运行(因此您可以在迭代之间轻松保持状态).这样,节省了重新部署每次迭代任务的时间.特别是对于Fabian提到的delta迭代特征,迭代(在数据的一小部分上)只能运行几秒钟. (4认同)