DAG(有向无环图)执行大数据是常见的。考虑到图可能是循环的,我想知道ApacheFlink是如何实现迭代的。
如果Flink执行迭代程序,则数据流图不是DAG,而是允许循环。然而,这些循环不是任意的,必须遵循特定的模式,以允许Flink在某种程度上控制这种循环流。
在其他系统中,通常没有严格的技术原因不支持循环。以通用的方式允许循环通常是被禁止的,因为这可能会导致无限循环(即元组永远旋转循环,程序不会终止)。
Flink通过计算迭代次数来跟踪循环。通过这种方式,Flink可以跟踪哪些元组属于哪些迭代,例如,可以避免新迭代中的元组"接管"旧迭代的元组。此外,它允许Flink检测迭代n
和n+1
的结果是否相等。相等的结果表示完成的计算允许Flink打破无限循环并终止(这适用于所谓的固定点迭代)。
如需详细阅读,请参阅本研究论文:https://dl.acm.org/citation.cfm?id=2350245
迭代在程序中的用法如下所述:https://ci.apache.org/projects/flink/flink-docs-release-0.10/apis/programming_guide.html#iteration-操作员