大数据的dag(directed acyclic graph)执行是常见的。我想知道apache flink是如何实现迭代的,因为图可能是循环的。
baubqpgj1#
如果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-操作员
n
n+1
1条答案
按热度按时间baubqpgj1#
如果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-操作员